Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Füllen einer ComboBox im OnCreate eines Frames (https://www.delphipraxis.net/143338-fuellen-einer-combobox-im-oncreate-eines-frames.html)

phorax 13. Nov 2009 16:17


Füllen einer ComboBox im OnCreate eines Frames
 
Hallo,

ich möchte eine ComboBox cmbBeruf mit Strings befüllen, wenn das Frame frameStammdaten erstellt wird, in etwa so:

Delphi-Quellcode:
constructor TframeStammdaten.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  with cmbBeruf.Items do
  begin
    Add('Irgendein Beruf');
    Add('Noch ein Beruf');
  end;
  // Weitere Controls initialisieren
end;
Anschließend wird das Frame mit InsertControl in die Hauptform eingefügt. Wenn ich Items.Add weglasse, funktioniert es wunderbar. Doch wenn ich Items.Add hinzufüge - das trifft scheinbar nicht nur für ComboBox, sondern für alle Controls zu, die TStrings beinhalten?!? - wird das Frame ohne Fehlermeldung (!) einfach nicht eingefügt: Ich nehme an, dass es nicht richtig erstellt wird. Kann mir jemand von Euch helfen?

hoika 13. Nov 2009 19:01

Re: Füllen einer ComboBox im OnCreate eines Frames
 
Hallo,

der Code sieht OK aus.

Zitat:

in etwa so:
Aha ...
Also machst du doch was anderes.

Zeige den wirklichen Code
oder probier es aus
- Auskommentieren
- Testen
- Code wieder reinnehmen


Ausserdem würde ich das with mal ersetzen

Delphi-Quellcode:
    cmbBeruf.Items.Add('Irgendein Beruf');
    cmbBeruf.Items.Add('Noch ein Beruf');
Heiko

Neutral General 13. Nov 2009 19:15

Re: Füllen einer ComboBox im OnCreate eines Frames
 
Hi,

Ich würde den Code evtl. lieber wirklich ins "echte" OnCreate des Formulars schreiben und nicht in den constructor.

Gruß
Neutral General

Luckie 13. Nov 2009 19:29

Re: Füllen einer ComboBox im OnCreate eines Frames
 
Existieren die Steuerelemente überhaupt zu dem Zeitpunkt schon?

phorax 13. Nov 2009 19:32

Re: Füllen einer ComboBox im OnCreate eines Frames
 
@hoiko: Das with zu ersetzen, bringt wohl nicht so viel :o). "In etwa so", weil noch ungefähr 20 andere Berufe hinzugefügt werden...es klappt aber schon mit einem nicht. Das mit dem Auskommentieren habe ich schon gemacht. Deshalb weiß ich ja, woran es hängt, aber eben nicht warum.
@Neutral General: Ein Frame hat kein "echtes" OnCreate. Deswegen diese Lösung.
@Michael: Ja, inherited Create() müsste eigentlich schon alle Elemente erzeugen. Assigned(cmbBerufe) liefert auch True.
Nachtrag: Es bringt auch nichts, die Werte schon in der Entwurfsansicht festzulegen!?!

alzaimar 13. Nov 2009 19:39

Re: Füllen einer ComboBox im OnCreate eines Frames
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Neutral General
Ich würde den Code evtl. lieber wirklich ins "echte" OnCreate des Formulars schreiben und nicht in den constructor.

Wieso? Funktioniert doch.

Siehe Anhang

phorax 13. Nov 2009 19:48

Re: Füllen einer ComboBox im OnCreate eines Frames
 
Liste der Anhänge anzeigen (Anzahl: 1)
@alzaimar: Ja, das funktioniert. Aber nur, wenn ich das Frame zur Design-Time in die Form einfüge. Wenn ich es zur Runtime einfüge (mit InsertControl) geht es nicht...Hab's noch einmal angehängt.

Ralf Kaiser 13. Nov 2009 19:52

Re: Füllen einer ComboBox im OnCreate eines Frames
 
Füge dem Frame doch eine Methode "FillComboBox()" hinzu. Diese Methode füllt dann die Combobox und wird von deinem Code aufgerufen nachdem das Frame eingefügt wurde.

Hawkeye219 13. Nov 2009 20:13

Re: Füllen einer ComboBox im OnCreate eines Frames
 
Hallo phorax,

warum verwendest du InsertControl?

Delphi-Quellcode:
procedure TMainForm.ButtonClick (Sender: TObject);
var
  Frame: TframeStammdaten;
begin
  Frame := TframeStammdaten.Create(Self);
//  InsertControl (Frame);
  Frame.Parent := Self;
end;
Gruß Hawkeye

phorax 13. Nov 2009 20:18

Re: Füllen einer ComboBox im OnCreate eines Frames
 
@Hawkeye219: Weil ich offenbar keine Ahnung habe :oops: . Danke!!! Das hat das Problem gelöst! Super!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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