![]() |
Delphi-Version: 7
Zur Laufzeit Comboboxen hinzufügen
Hallo,
ich würde gerne zur Laufzeit meines Programms per Buttonclick Comboboxen hinzufügen, dabei soll bei jedem weiteren Click eine neue Combobox unter der vorherigen angehängt werden. Wie kann ich das am besten realisieren? |
AW: Zur Laufzeit Comboboxen hinzufügen
Es gibt zwei Möglichkeiten.
1. Wenn, wie bei deinem anderen Thread, die Anzahl der möglichen Comboboxen limitiert ist, kannst du sie wie da schon vorher im Designermodus auf die Form legen und dann nach und nach sichtbar schalten. 2. Ist dies nicht der Fall, so musst du mit dynamischen Komponenten arbeiten, d.h. du kreierst die Comboboxen zur Laufzeit selbst. Dies sähe z.B. so aus:
Code:
Im Prinzip kreierst du die ComboBox als Variable und modifizierst sie so wie du sie brauchst, also Items einfügen, Größe und Position festlegen, Ereignisse verknüpfen etc.
Procedure KreiereComboBox;
Var ACombobox : TComboBox; Begin AComboBox := TComboBox.Create(GroupBox1); AComboBox.Parent := GroupBox1; AComboBox.Height := 14; AComboBox.Width := 50; AComboBox.Left := 5; AComboBox.Top := 10; AComboBox.Items.Add('Bla'); AComboBox.Items.Add('Bla'); AComboBox.Items.Add('Bla'); AComboBox.ItemIndex := 0; AComboBox.Name := 'XYZComboBox'; AComboBox.OnChange := BlaBlaBlubChange; End; Willst du später auf diese ComboBoxen nochmal zugreifen, ist es am sinnvollsten, diese dynamisch erzeugten Comboboxen z.B. in einer Liste abzuspeichern, um einen einfachen Zugriff zu haben, da diese im Gegensatz zum im Designer erzeugten Komponenten nicht direkt ansprechbar sind. |
AW: Zur Laufzeit Comboboxen hinzufügen
Man sollte aber noch den Parent setzen, damit sie auch gezeichnet wird und den Owner, damit der Owner das Zerstören übernimmt.
|
AW: Zur Laufzeit Comboboxen hinzufügen
Hier ein konstrukt wie man evtl an solch eine sache rangehen könnte.
Nur im Notepad geschrieben, also ungetestet!
Delphi-Quellcode:
Ich hoffe es hilft, im close event halt die cbList durchiterieren und .Free ranpappen.
var
Form1: TForm1; cbList: TList; implementation // wenn als click-event, dann sollte hier nur die cbList initialisiert werden und im click dann einfach adden procedure TForm1.FormCreate(Sender: TObject); var i: integer cb: TComboBox; begin cbList := TList.Create; for i := 0 to 9 do begin cb := TComboBox.Create(self); cb.Parent := self; cb.Top := (i * (cb.Height + 3)); // weitere optionen setzen cbList.Add(cb); end; // als beispiel alle boxen mit text versehen: for i := 0 to cbList.Count-1 do TComboBox(cbList[i]).Text := Format('ComboBox %d', [i]); end; |
AW: Zur Laufzeit Comboboxen hinzufügen
Der trauchige Witz ist, dass in der VCL sich auch der Parent um die Freigabe kümmert. (vermutlich auch im FMX der selbe Mist, aber hab mich nicht getraut nachzusehn)
|
AW: Zur Laufzeit Comboboxen hinzufügen
Ach genau, Parent vergessen. Habs angepasst.
Ja, in FMX isses genauso, muss man auch Parent und Owner festlegen. Mit dynamischen Komponenten zu arbeiten macht unglaublich viel Spaß. Deswegen greife ich für gewöhnlich auf TFrames zurück, wenn es nicht nur um einzelne Komponenten geht. Das macht die Sache deutlich angenehmer. |
AW: Zur Laufzeit Comboboxen hinzufügen
Zitat:
Delphi-Quellcode:
var
Form1: TForm1; cbList: TList; implementation procedure TForm1.FormCreate(Sender: TObject); begin cbList := TList.Create; end; procedure TForm1.Button1Click(Sender: TObject); var cb: TComboBox; begin cb := TComboBox.Create(self); cb.Parent := self; cb.Top := (cbList.Count * (cb.Height + 3)); // weitere eigenschaften setzen cbList.Add(cb); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var i: integer; begin // einfach mal testen ob's nötig ist, ich möchte mich nicht festlegen for i := 0 to cbList.Count-1 do TComboBox(cbList[i]).Free; cbList.Free; end; |
AW: Zur Laufzeit Comboboxen hinzufügen
Zitat:
Super! Das funktioniert einwandfrei. Vielen Dank für euere Hilfe! Nun abschließend noch; den Inhalt von Comboboxen fülle ich ja normalerweise in der StringList der Combobox in den Properties. Das funktioniert hier wie es scheint nicht, da ja noch keine Combobox vorhanden ist, welche ich füllen kann. Wie kann ich nun den Inhalt aller erzeugter Comboboxen vorbestimmen? |
AW: Zur Laufzeit Comboboxen hinzufügen
In dem du den Wert zur Laufzeit hinzufügst bzw. setzt. (ComboBox.Items)
|
AW: Zur Laufzeit Comboboxen hinzufügen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 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-2025 by Thomas Breitkreuz