Autor Beitrag
anno2007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Di 07.04.09 21:42 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 07.04.09 23:10 
Hallo,

oder c.:

alle Checkboxen bekommen einen gemeinsamen Event-Handler in dem ein Counter gepflegt wird:
ausblenden 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;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Mi 08.04.09 01:02 
Hat alles perfekt geklappt :).
Ich danke euch.

THX
anno2007
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 08.04.09 08:37 
Hi :)

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

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)