Mehrere Frames zur Laufzeit anlegen
-
Hallo,
Ich hab ein Frame erstellt und möchte den jetzt zur Laufzeit mehrfach auf meine Form bringen.
Mein Ansatz zum testen:
void __fastcall TForm_Main::Button1Click(TObject *Sender) { TCLQ_Frame *CLQ1 = new TCLQ_Frame(this); CLQ1->Parent=this; } //--------------------------------------------------------------------------- void __fastcall TForm_Main::Button2Click(TObject *Sender) { TCLQ_Frame *CLQ2 = new TCLQ_Frame(this); CLQ2->Parent =this; } //---------------------------------------------------------------------------
Wenn ich Button1 drücke erscheint der Frame. Wenn ich danach button2 drücke, bekomm ich eine Fehlermeldung "Komponente mit der Bezeichnung CLQ_Frame exestiert schon".
Was mach ich falsch?
Danke schonmal.
-
Du mußt wohl die Eigenschaft 'Name' jeweils ändern, d.h.
TCLQ_Frame *CLQ1 = new TCLQ_Frame(this); CLQ1->Name = "CLQ1"; CLQ1->Parent=this; // bzw. TCLQ_Frame *CLQ2 = new TCLQ_Frame(this); CLQ2->Name = "CLQ2"; CLQ2->Parent=this;
Und wenn du es dynamisch haben willst, dann erzeuge dir einen Counter als Membervariable und schreibe
TCLQ_Frame *CLQ = new TCLQ_Frame(this); CLQ->Name = "CLQ" + IntToStr(++m_nFrameCounter); CLQ->Parent=this;
-
Danke,
das funktioniert so, aber warum bleibt mir ein rätsel. wenn ich so z.B. einen Button anlege brauch ich doch auch nicht noch den Namen zuweisen.
-
Hallo
Wenn du einen normalen Button anlegst, dann entweder über den OI. Dann erstellt der OI jeweils einen neuen Namen. Oder dynamisch mit new, dann bleibt die Eigenschaft Name meistens leer, und das akzeptiert die VCL immer.
Aber dein Frame ist mit dem OI erstellt und bekommt deshalb genau einen Namen. Da du von dieser Klasse aber nun dynamisch weitere Instanzen erstellst, kollidieren die gleichen Namen.bis bald
akari