Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Checkboxen Haken an/aus


hansg - So 19.01.03 15:37
Titel: Checkboxen Haken an/aus
Hallo,
kann man mehrere Checkboxen mit einer Schleife auf einmal den Haken
setzen bzw. wegnehmen oder muß ich alle mit checkbox1.checked:=true; bzw. mit checkbox1.checked:=false; alle zu Fuß setzten?


Gruß Hans


Klabautermann - So 19.01.03 15:48

Hallo,

lese mal dieses Topic [http://www.delphi-forum.de/viewtopic.php?t=5617], ich denke das wird einige deiner Fragen beantworten.

Gruß
Klabautermann


hansg - So 19.01.03 16:18

Hallo,
irgendwie klappt das nicht:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var checkbox: array[1..20] of TCheckbox;
    i: integer;
begin
   for i:=1 to 20 do
   begin
     checkbox[i].checked:=true;
   end;
end;


wo liegt der Fehler, Delphi stürzt dann ab?



Gruß Hans


Wolff68 - So 19.01.03 17:03

TCeckbox ist ein Objekt ! (Und noch dazu ein visuelles)
Mit var checkbox : Array [1..20] of TCheckbox weist Du nur der Variablen eine TCheckbox zu. Du musst sie aber noch erzeugen!


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
For i := 1 to 20 do begin
  CheckBox[i] := TCheckBox.Create(self);
  With CheckBox[i] do begin
    Parent := Form1; // bzw das Object, auf dem die Checkbox erscheinen soll
    Top := i*24;
    Left := 8;
    { eventuell noch weitere Eingenschaften einstellen... }
  end;
end;


(Steht übrigends auch so im 2. Beitrag des Topics, das Dir Klabautermann empfohlen hat)


derDoc - So 19.01.03 17:25

Sicher kann man das auch so lösen, aber wenn er nicht jeder CheckBox erst zur Laufzeit erstellen will musst du wie folgt vorgehen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  current: TCheckBox;
begin
  for i := 1 to 10 do
  begin
    case i of
      1: current := CheckBox1;
      2: current := CheckBox2;
      3: current := CheckBox3;
      4: current := CheckBox4;
      5: current := CheckBox5;
      6: current := CheckBox6;
      7: current := CheckBox7;
      8: current := CheckBox8;
      9: current := CheckBox9;
      10: current := CheckBox10;
    end;
    current.State := cbChecked;
  end;
end;


Allerdings bin ich mir nicht sicher, ob es dann noch eine Vereinfachung ist.


Christian S. - So 19.01.03 17:30

@derDoc: Da wäre FindComponent geeigneter, oder?


derDoc - So 19.01.03 18:04

Also ich gebe mich geschlagen, wenn man es wie Peter sagt macht geht es einfacher. Ich poste deshalb hier den einfachen Code:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  current: TCheckBox;
begin
  for i := 1 to 10 do
  begin
  current := TCheckBox(FindComponent('CheckBox'+IntToStr(i)));
  current.State := cbChecked;
  end;
end;


Wenn jemand noch Vorschläge hat, ich bin für weitere Vereinfachungen offen.

@hansg:
Ich glaube deine Frage ist nun beantwortet.


hansg - So 19.01.03 20:25

Hallo an alle,
jetzt komme ich weiter :D :) :P


Vielen Dank
Hans