Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - For schleife - Checkboxen


anno2007 - Di 07.04.09 21:42
Titel: For schleife - Checkboxen
Hi,
wie durchläuft man Checkboxen mit ner For-Schleife?

z.B. wenn ich 10 Checkboxen checken will und dabei einen Counter hochzählen will, falls die Checkbox gecheckt ist.


Thx
anno2007


Yogu - Di 07.04.09 22:26

Du hast mehrere Möglichkeiten.

  1. Abfragen der CheckBoxen per FindComponent: Rufe diese Funktion auf und gib als Parameter den Namen der Komponente an. Den kannst du ja aus einem konstanten Text und einer Zahl (der Schleifenvariable) zusammensetzen, wenn die Komponenten CheckBox1 .. CheckBox10 heißen.
  2. Du packst alle CheckBoxen in ein Panel o.ä. und rufst dessen Eigenschaften ControlCount und Controls[Index] auf. In der for-Schleife kannst du alle Controls des Panels abklappern und mit Controls[i] auf das Control zugreifen.

In beiden Fällen ist ein anschließendes Suche in der Entwickler-Ecke CASTING notwendig. (TCheckBox(...))


Lannes - Di 07.04.09 23:10

Hallo,

oder c.:

alle Checkboxen bekommen einen gemeinsamen Event-Handler in dem ein Counter gepflegt wird:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.MyCheckBoxClick(Sender: TObject);
begin
  if TCheckBox(Sender).Checked then
    inc(CheckBoxCounter)
    else
      dec(CheckBoxCounter);
end;


ffgorcky - Di 07.04.09 23:22

Also ich würde ja ein Array dafür anlegen - vor allem, wenn Du nachher eine Schleife zur möglichst schnellen Auswertung nutzen möchtest - also das wäre dann in etwa so:

Delphi-Quelltext
1:
var Checkboxen:array[0..9of TCheckbox                    

Dann ist nur die Frage, ob Du die dann alle einzeln in dieses Array einfügst mit:

Delphi-Quelltext
1:
2:
3:
4:
arrayCheckbox[0]:=Checkbox1;
arrayCheckbox[1]:=Checkbox2;
arrayCheckbox[2]:=Checkbox3;
...

Oder ob Du die Checkboxen mit dieser Möglichkeit hizufügst:

Delphi-Quelltext
1:
2:
3:
for i:=0 to Form1.ControlCount-1 do
  if Controls[i] is TCheckbox then
    arrayCheckbox.add(Controls[i])

Schneller ist ja auf jeden Fall die erste Variante, aber die zweite ist universeller einsetzbar - also brauchst Du dann da nicht mehr so unbedingt dran denken, die neue Checkbox auch noch mit da rein zu schreiben, wenn Du noch eine mehr haben möchtest.


anno2007 - Mi 08.04.09 01:02

Hat alles perfekt geklappt :).
Ich danke euch.

THX
anno2007


Hidden - Mi 08.04.09 08:37

Hi :)

Es gibt auch eine Komponente namens TCheckListbox, die das ganze etwas einfacher machen könnte.

mfG,