Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Komponenten auf dem Panel durchlaufen??? (https://www.delphipraxis.net/154478-komponenten-auf-dem-panel-durchlaufen.html)

romber 12. Sep 2010 16:34

Komponenten auf dem Panel durchlaufen???
 
Hallo!

Ich habe auf einem TPanel mehrere CheckBoxen, jedem ist ein Tag > 0 zugewiesen. Nun muss ich Tags von gecheckten Boxen auslesen. Wie kann ich in einer Schleife alle CheckBoxen durchlaufen, ohne dass ich nach und nach den Wert jeder CheckBox auslese???

Danke!

Hansa 12. Sep 2010 16:41

AW: Komponenten auf der Panel durchlaufen???
 
Wie soll denn das gehen ? Das hier :
Zitat:

Zitat von romber (Beitrag 1049090)
Wie kann ich in einer Schleife alle CheckBoxen durchlaufen, ohne dass ich nach und nach den Wert jeder CheckBox auslese???

:shock: Das wird wohl nur so gehen :

Delphi-Quellcode:
Pseudo-Code :
for i := 0 to ComponentCount do begin
  if CheckBox.IsChecked then
    TueWas;
...
end;

haentschman 12. Sep 2010 16:42

AW: Komponenten auf der Panel durchlaufen???
 
Hallo...

Delphi-Referenz durchsuchenFindComponent dürfte hier dein Freund sein :hi:

romber 12. Sep 2010 17:01

AW: Komponenten auf der Panel durchlaufen???
 
Zitat:

Zitat von haentschman (Beitrag 1049094)
FindComponent[/OH][/B] dürfte hier dein Freund sein :hi:

Bei FindComponent muss ich doch auch jede Komponente mit dem namen suchen. Genau so könnte ich doch auch auf jede Komponente einzeln zugereifen und Status abfragen, oder?

haentschman 12. Sep 2010 17:11

AW: Komponenten auf der Panel durchlaufen???
 
nun ja, mit FindComponent findes du nur die CheckBoxen z.B.
Mit Components hast du alle Komponenten. ComponentCount ist die Summe aller Komponenten. Wenn die Checkboxen durchnummeriert sind kannst du das ganze in einer Schleife ablaufen lassen. Siehe Beispiele: Beispiele ganz unten

Uwe Raabe 12. Sep 2010 17:13

AW: Komponenten auf der Panel durchlaufen???
 
Delphi-Quellcode:
procedure TForm51.Button1Click(Sender: TObject);
var
  chk: TCheckBox;
  I: Integer;
begin
  for I := 0 to Panel1.ControlCount - 1 do begin
    if Panel1.Controls[I] is TCheckBox then begin
      chk := TCheckBox(Panel1.Controls[I]);
      if chk.Checked then begin
        TueWasMit(chk.Tag);
      end;
    end;
  end;
end;

haentschman 12. Sep 2010 17:16

AW: Komponenten auf der Panel durchlaufen???
 
... auch ne Variante 8-)

Hansa 12. Sep 2010 17:25

AW: Komponenten auf der Panel durchlaufen???
 
Glaube, Haentschman hat sich etwas vertan. Mit FindComponent kriegt man ja nur EIN Steuerelement. Je nachdem, was auf dem Panel alles drauf ist, dann nützt das wohl nicht viel ? :shock:

Habe allerdings noch was vergessen :

Delphi-Quellcode:
Pseudo-Code :
for i := 0 to ComponentCount do begin
  if Control IS TCheckBox then  // <--------------------------------
    if CheckBox.IsChecked then
      TueWas;
...
end;
Jetzt lese aber auch mal selber in der Hilfe nach den gelieferten Stichworten. 8-) Mir fällt aber noch gerade auf, dass mein Vorschlag so auch nicht so einfach geht, es sei denn die Checkboxen sind nur auf dem Panel und sonstwo auf der Form sind keine. Ah, roter Kasten. Ja, so wie Uwe Raabe das gemacht hat. So müsste das doch gehen. Dann müsste man aber wohl den Checkboxen explizit sagen, dass das Panel Parent ist ? :gruebel: Es ist immer dasselbe. Bei näherem Hinsehen ist doch alles komplizierter, als anfangs gedacht. :mrgreen:

Satty67 12. Sep 2010 17:35

AW: Komponenten auf der Panel durchlaufen???
 
Er könnte auch allen CheckBoxen das gleiche Click-Ereignis zuweisen und darin ein TrueFalse-Array pflegen. Listen-Index = Tag

Die Liste kann er dann als property publizieren, falls das ganze in einem Dialog für ein MainForm abläuft.

Uwe Raabe 12. Sep 2010 17:50

AW: Komponenten auf der Panel durchlaufen???
 
Achtung - quer gedacht: Mann kann auch jeder CheckBox eine Action zuweisen, die alle in derselben ActionList liegen. Dann iteriert man durch die ActionList und das war's.

Hat nebenbei noch den Vorteil, daß man die Checked-Property im OnUpdate-Event aktualisieren kann.

Die Actions können übrigens alle die gleichen Event-Handler haben, da man ja immer noch das Tag zur Unterscheidung hat.

Kommt natürlich alles auf die Anwendung an...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz