Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - mittels Schleife alle checkboxes durchlaufen


achi 3.0 - Do 18.09.08 12:07
Titel: mittels Schleife alle checkboxes durchlaufen
hallo habe eine form in der man mittels einigen checkboxes einstellungen macht.

ich wollte eine schleife machen in der automatisch alle checkboxes durchlaufen werden hier die syntax

leider klappt das nicht delphi mekert wegen des index checkbox1 ist ok aber checkbox[x] nicht obwohl x=1 ist.

gibts da eine methode mit der das geht

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
begin
     for x:=1 to 15 do
     for i:=0 to 15 do
     begin
     if (checkbox[x].checked) and (checkbox[x+1].checked) and not (checkbox[x+2].checked)  then
        Nadelplan[i]:=75
        else if checkbox[x].checked and checkbox[x+2].checkedand then
             Nadelplan[i]:=150
             else if checkbox[x+1].checked and checkbox[x+2].checked and not checkbox[x].checked then
                     Nadelplan[i]:=75
                     else Nadelplan[i]:=0;
     end;

danke

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Xentar - Do 18.09.08 12:09

Entweder du legst dir ein Array of TCheckBox an, und weist diesem z.B. im OnCreate des Formulars alle Checkboxen einzeln zu,
oder evtl. mit FindComponent()


tif - Do 18.09.08 13:43

Hallo, ich habe mal sowas gemacht :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Function  Tf_Rechte.FindSwitch(number:Integer):TCheckBox;
Var i:Integer;
Begin
  for i:=0 to Panel_daten.controlcount-1 do
    if (Panel_daten.controls[i] IS TcheckBox) And (Panel_daten.controls[i].Name = 'CheckBox'+IntToStr(Number)) Then
    begin
      result:=TcheckBox(Panel_daten.controls[i]);
      exit;
    end;
  result:=NIL;
end;


und dann z.B.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Procedure Tf_Rechte.SetValues(Value:ShortString);
var help : TcheckBox;
    i    : Integer;
Begin
  for i:=1 to 20 Do Begin
    help:=FindSwitch(i);
    if help <> NIL Then
      help.checked:=Value[i]='1';
  end;
end;


Wenn die checkboxen auf mehreren Panels, Groupboxen etc liegen, muss man FindSwitch() rekursiv gestalten.

Grüße
Tino


Bergmann89 - Do 18.09.08 13:50

HI,

ich denke der einfachste weg is über FindComponent, wie Xentar schon gesagt hat.


Delphi-Quelltext
1:
2:
for i := 0 to 10 do
  if TCheckBox(FindComponent('CheckBox'+IntToStr(i))).Checked then [...]


so funzt das dann...

MfG Bergmann.