![]() |
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! |
AW: Komponenten auf der Panel durchlaufen???
Wie soll denn das gehen ? Das hier :
Zitat:
Delphi-Quellcode:
Pseudo-Code :
for i := 0 to ComponentCount do begin if CheckBox.IsChecked then TueWas; ... end; |
AW: Komponenten auf der Panel durchlaufen???
|
AW: Komponenten auf der Panel durchlaufen???
Zitat:
|
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: ![]() |
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; |
AW: Komponenten auf der Panel durchlaufen???
... auch ne Variante 8-)
|
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:
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:
Pseudo-Code :
for i := 0 to ComponentCount do begin if Control IS TCheckBox then // <-------------------------------- if CheckBox.IsChecked then TueWas; ... end; |
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. |
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 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz