AGB  ·  Datenschutz  ·  Impressum  







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

Zur Laufzeit Comboboxen hinzufügen

Ein Thema von KomischerKautz · begonnen am 14. Feb 2020 · letzter Beitrag vom 21. Feb 2020
Antwort Antwort
KomischerKautz

Registriert seit: 5. Feb 2020
4 Beiträge
 
#1

Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 09:16
Delphi-Version: 7
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?
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
247 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 09:35
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:
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;
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.

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.

Geändert von AuronTLG (14. Feb 2020 um 12:02 Uhr) Grund: Parent vergessen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 10:58
Man sollte aber noch den Parent setzen, damit sie auch gezeichnet wird und den Owner, damit der Owner das Zerstören übernimmt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 11:53
Hier ein konstrukt wie man evtl an solch eine sache rangehen könnte.
Nur im Notepad geschrieben, also ungetestet!
Delphi-Quellcode:
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;
Ich hoffe es hilft, im close event halt die cbList durchiterieren und .Free ranpappen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.279 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 11:58
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
AuronTLG

Registriert seit: 2. Mai 2018
Ort: Marburg
247 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 12:04
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.
  Mit Zitat antworten Zitat
Alt 14. Feb 2020, 12:22     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.858 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 17:53
Man sollte aber noch den Parent setzen, damit sie auch gezeichnet wird und den Owner, damit der Owner das Zerstören übernimmt.
Hast du dir das erste Codebeispiel mal angeschaut?
Das wird dort beides gesetz. Einmal per COnstructor und dann noch separat
der Parent per Zuweisung.

Das einzige was einen stören könnte wäre, dass der COde als Prozedur und nicht als Methode umgesetzt ist.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 18:37
Das hat er nach meinem Hinweis nachträglich eingefügt.

Vergleiche:
Timestamp seines Beitrages
Timestamp meines Beitrages
Timestamp seines Änderung

Und er hat den Änderungsgrund sogar genannt.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (14. Feb 2020 um 18:47 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:54 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