checkboxa a edit

0

Hi, mam problem: zakładając ze mam 10 checkboxow i ktos zaznaczy np 4 z nich to wyswietla mi sie 4 edity( visible :=true)... ktos zaznaczy 6 checkboxow to pojawi sie 6 editow itd ?? jak to zrobic ?

i 2 pytanie//*/ja zapisac do zmiennej ilosc danego komponentu np. mam na formie 3 edity to wartosc wyiesie 3 *?? help me [glowa]

0

Można tak: Każdemu polu tag TEdit nadaj kolejny numer np. 0..9, to samo dla TCheckBoxa. Napisz procedurę w stylu

case CheckBox.Tag of
0 :Edit1.Visible := CheckBox.Checked;
// (...)
n :EditN.Visible := CheckBox.Checked;
end;

i podepnij ją pod OnChange TCheckBox'a

Co do 2, to FindComponent or (ComponentCount and Components and as), for

0

Zakładając, że CheckBox ma w polu Tag wartość N, odpowiadającą komponentowi EditN, to możesz to zrobić tak: wspólna akcja dla wszystkich CheckBox'ów (długie, ale idiotoodporne):

procedure TForm1.CheckBoxClick(Sender: TObject);
var Component:TComponent;
begin
if not (Sender is TCheckBox) then exit;
Component:=FindComponent('Edit'+IntToStr(TCheckBox(Sender).Tag));
if (Component<>nil) and (Component is TEdit) then
  TEdit(Component).Visible:=TCheckBox(Sender).Checked;
end;

Możesz też tak:

if Sender=CheckBox1 then Edit1.Visible:=CheckBox1.Checked;
if Sender=CheckBox2 then Edit2.Visible:=CheckBox2.Checked;

Mniej uniwersalne ale krótsze.

function Ilosc(WinControl:TWinControl):integer;
var i:integer;
begin
result:=0;
for i:=0 to WinControl.ControlCount-1 do
  begin
  if (WinControl.Controls[i] is TWinControl) then
    inc(result, Ilosc(TWinControl(WinControl.Controls[i])));
  //Szukanie komponentów klasy TEdit
  if (WinControl.Controls[i] is TEdit) then
    inc(result);
  end;
end;

procedure TForm1.ButtonClick(Sender: TObject);
begin
Caption:=IntToStr(Ilosc(self));
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1