Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Comboboxen und co.
check_it_now - Mi 18.12.02 16:33
Titel: Comboboxen und co.
guten tag,
wenn ich mir die eigenschaften von comboboxen, label, textboxen usw. ansehe kann ich keine moeglichkeit einer idizierung entdecken. ist das bei delphi so?
bsp vb6.
Quelltext
1: 2: 3: 4: 5: 6:
| for i = 1 to 4 combobox(i).text="123" next i for i = 5 to 8 combobox(i).text="xyz" next i |
damit fuelle ich gezielt z.b default infos in combobox 1-4
und andere infos in combobox 5-8 ohne diese separat ansprechen zu muessen.
was muss ich dafuer bei delphi tuen.
note: comboboxen sind nur ein beispiel.
Keldorn - Mi 18.12.02 16:44
Hallo
such mal im Forum und in der hilfe nach Findcomponent.
Mfg Frank
DeCodeGuru - Mi 18.12.02 16:44
Hi,
versuchs mal damit:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var i: Integer; begin for i := 1 to 99 do begin TCheckBox(FindComponent('CheckBox'+IntToStr(i))).Caption := 'Testnummer'+IntToStr(i); end; end; |
Ich denke, dass das Beispiel gut zeigt, wie man per Name auf ne Kompo zugreifen kann.
Klabautermann - Mi 18.12.02 17:09
Hallo,
das dir aus Visual-Basic bekannte Konzept der Komponentenarrays gibt es im Delphi nicht. Das wird für dich wahrscheinlich genau so störent sein, wie es für mich war, das VB meine Copy/Paste Komponenten immer in so'n Ding gehängt hat.
Die Lösung von DeCodeGuru ist das, was am dichtesten rankommt. Aber du solltest das ganze noch ein wenig absichern, um keine Exceptions zu verursachen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var i: Integer; Compo : tComponent; begin for i := 1 to 99 do begin Compo := FindComponent('CheckBox'+IntToStr(i)); IF (Compo <> NIL) THEN // Komponente wurde gefungen IF (Compo IS tCheckBox) THEN // Wenn es sich um eine Checkbox handelt TCheckBox(Compo).Caption := 'Testnummer'+IntToStr(i) ELSE IF (Compo IS tEdit) THEN // Wenn es ein Edit ist TEdit(Compo).Text := 'Testnummer'+IntToStr(i); end; end; |
Gruß
Klabautermann
check_it_now - Do 19.12.02 09:01
ok dann muss ich umdenken
danke @all
Andreas.Schmid - Do 19.12.02 17:34
Hallo @All,
ich hätte da vielleicht eine noch bessere Lösung zu bieten!
Wenn du nämlich die Namen der Komponenten nicht kennst, sondern nur den Typ und diese trotzdem ansprechen willst, dann könnte meine Lösung dir weiter helfen.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var i: integer; begin for i := 0 to (self.ComponentCount - 1) do begin if (self.Components[i] is TComboBox) then begin TComboBox(self.Components[i]).{hier können alle Eigenschaften der ComboBox angesprochen werden} end; end; end; |
TComboBox kannst du durch jede beliebige visuelle Komponente ersetzten.
Besonders wichtig ist aber, dass die Sicherheit gegeben ist und du keine Komponente finden kannst, die es nicht gibt. :D
Ist das, das was du wolltest oder hab ich da etwas falsch verstanden?
Klabautermann - Do 19.12.02 17:48
Nachtrag: Wenn du viele Komponenten Dynamisch erzeugst (und das ist meiner bescheidenen Meinung nach der Einzige sinnvolle einsatz der Indizierten Komponenten) Kannst du übrigens ein Array OF MyCompo definieren und über deren Indizies drauf zudreifen.
Ein (ungetestetes) Beispiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private fLabels : ARRAY[1..100] OF tLabel; [...]
procedure MkLabels; VAR i : Byte; begin FOR i := 1 TO 100 DO BEGIN fLabels[i] := tLabel.Create(MainForm); fLabels[i].Left := 25; fLabels[i].Top := i * 30; END; end;
procedure SetText(lbl : Byte; TXT : STRING); begin fLabels[lbl].Caption := TXT; end; |
Gruß
Klabautermann
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!