AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten auf dem Panel durchlaufen???

Ein Thema von romber · begonnen am 12. Sep 2010 · letzter Beitrag vom 13. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Komponenten auf dem Panel durchlaufen???

  Alt 12. Sep 2010, 16:34
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!

Geändert von SirThornberry (13. Sep 2010 um 07:38 Uhr)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 16:41
Wie soll denn das gehen ? Das hier :
Wie kann ich in einer Schleife alle CheckBoxen durchlaufen, ohne dass ich nach und nach den Wert jeder CheckBox auslese???
Das wird wohl nur so gehen :

Delphi-Quellcode:
Pseudo-Code :
for i := 0 to ComponentCount do begin
  if CheckBox.IsChecked then
    TueWas;
...
end;
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#3

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 16:42
Hallo...

Delphi-Referenz durchsuchenFindComponent dürfte hier dein Freund sein

Geändert von haentschman (12. Sep 2010 um 16:46 Uhr)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 17:01
FindComponent[/OH][/B] dürfte hier dein Freund sein
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?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#5

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 17:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.019 Beiträge
 
Delphi 12 Athens
 
#6

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 17:13
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#7

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 17:16
... auch ne Variante
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 17:25
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 ?

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. 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 ? Es ist immer dasselbe. Bei näherem Hinsehen ist doch alles komplizierter, als anfangs gedacht.
Gruß
Hansa
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 17:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.019 Beiträge
 
Delphi 12 Athens
 
#10

AW: Komponenten auf der Panel durchlaufen???

  Alt 12. Sep 2010, 17:50
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...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
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