Problem mit dynamisch erzeugten Buttons
-
Also ich erzeuge beispielsweise Buttons so:
DynamicArray<TButton*> testBtns;testBtns.Length++; // nachlesen testBtns[0] = new TButton(Handle); // Button erstellen testBtns[0]->Caption = "TestButton"; // Belegung von Button-Eigenschaften ........... delete testBtns[0]; // nicht vergessenMein Problem ist, dass der bzw. die erzeugten Button nicht auf dem Form dargestellt werden.
testBtns->Show(); testBtns->Left = 0; testBtns->Top =0; testBtns->Width = 50; testBtns->Height = 50;was mache ich falsch oder hab ich vergessen?
-
1. Das "delete" erst dann aufrufen, wenn du die Buttons nichtmehr brauchst, spätestens beim Beenden des Programms.
2. Du solltest dir dringenst ansehen, was Arrays sind und wie man auf einzelne Elemente zugreift.
3. Wenn du immer das erste Element überschreibst, wieso nimmst du dann überhaupt ein Array?
4. Parent-Eigenschaft muss gesetzt sein, damit der Button weiß, wo er gezeichnet werden soll.
-
der Code kommt mir doch bekannt vor

ich habe vergessen
testBtns[0]->Parent = Form1;und
delete testBtns[0];kannst du dir durch dass ersparren
testBtns.Length = 0;BigNeal
-
BigNeal schrieb:
der Code kommt mir doch bekannt vor

ich habe vergessen
testBtns[0]->Parent = Form1;und
delete testBtns[0];kannst du dir durch dass ersparren
testBtns.Length = 0;BigNeal
hast recht, der ist von dir.
Thx für den Tip, jetzt scheint's zu gehen.
@Windoof
es war ja nur ein Bsp-Code, sonst weiß ich ja dass es keinen Sinn hätte.in meinem Prog wird das delete erst beim Beenden (OnClose) aufgerufen.
Thx nochmals !!!
-
Damit
testBtns.Length = 0;
setzt du lediglich dein Array auf die Größe 0. Die enthaltenen Pointer auf TButton werden dabei nicht gelöscht.
-
gibts eigentlich noch eine Möglichkeit so erzeugte Komponenten auf Image oder andere Objekte zu begrenzen?
so in etwa in der Form:testBtns[0]->Parent = Form1->Image1; // geht nicht, wäre aber nicht schlechtKennt jmd so etwas?
-
Parent ist vom Typ TWinControl. Das geht also nur für solche oder für von TWinControl abgeleitete Objekte.
-
zB:
btnsTest[0]->Parent = GroupBox1;
-
also ich habe jetzt das TImage auf eine Panel gelegt, und auf die kann ich ja dann die Buttons erstellen. Panel ist jetzt so groß wie das TImage, was im Prog dann gar nicht mehr auffällt.
btnsTest[0]->Parent = Panel1;Thx !!!