![]() |
Alle Komponenten in Groupbox löschen
Hi,
ich habe eine Groupbox, in der ich dynamisch versch. Ergebnisse einer Berechnung anzeige. Dabei handelt es sich um edit- und labelfelder. Diese werden während der Laufzeit erzeugt. Parent ist die GroupBox mit Namem Ergenbnis. Beim klicken auf einen button werden die Ergebnisse angezeigt. Nun kann ich aber nur einmal auf den butten klicken, weil die Felder nicht mehrfach erzeugt werden können. Was muss ich an den Anfang der button-click Procedure schreiben, damit alle Komponenten in der GroupBox erstmal gelöscht werden, bevor daraufhin neue erstellt werden? Ich habe
Code:
probiert. Geht aber nicht. Nun weiß ich nicht weiter...
form1.Ergebnis.DestroyComponents;
|
Re: Alle Komponenten in Groupbox löschen
Hast du auch das hier getan?
Delphi-Quellcode:
dynLabel.Parent := Form1.GroupErgebis;
|
Re: Alle Komponenten in Groupbox löschen
Hmmm, da kann ich jetzt ehrlich gesagt nicht viel mit anfangen. :oops:
Wofür ist das denn gut? |
Re: Alle Komponenten in Groupbox löschen
Was Dax meint ist folgendes:
Jede deiner dynamisch erzeugten Komponenten müssen in der Eingenschaft "Parent" die GroupBox gesetzt haben. Dann sollte es eigentlich funktionieren. Wofür das gut ist? Dadurch weiß die GroupBox, welche untergeordneten Komponenten zu ihm gehören. (Parent <-> Child). |
Re: Alle Komponenten in Groupbox löschen
OK, jetzt weiss ich, wo dein Problem liegt: Du solltest deine Subcomponents (also die Labels) so erstellen:
Delphi-Quellcode:
So wird dem Label "gesagt", das es zu der Box gehört. Wenn du nun Ereignis.DestroyComponents aufrufst, zerstört es alle Subcomponents der Box.
dynLabel := TLabel.Create(Ereignis);
|
Re: Alle Komponenten in Groupbox löschen
Zitat:
Der Parent gibt "nur" an das die Komponente in dem Comtainer gezeichnet werden soll. Der Owner gibt an wem die Komponente gehört. Der Owner wird beim Create angegeben.
Delphi-Quellcode:
[edit]
...
l := TLabel.Create(Form1); l.Parent := Ergebnis; ... Ergebnis.DestroyComponents; // bringt nichts !!! ... l := TLabel.Create(Ergebnis); l.Parent := Ergebnis; ... Ergebnis.DestroyComponents; // jetzt klappts !!! ... ups, hallo Dax, habe Deine Antwort gar nicht gesehen :oops: Sorry für den unnötigen Post [/edit] |
Re: Alle Komponenten in Groupbox löschen
Sorry. Ihr habt natürlich recht :oops: .
Ich sollte nicht mal eben auf die schnelle auf sowas antworten. Bitte lasst Gnade walten. :pale: |
Re: Alle Komponenten in Groupbox löschen
Danke, dass ihr alle so schnell geantwortet habt.
Es hat geklappt. Vorher hatte ich eine Komponente so erzeugt:
Code:
Jetzt habe ich es so gemacht, wie Ihr geschrieben habt (var dynl:tlabel):
TLabel.Create(Ergebnis).Name := 'LGewinn';
with tlabel (findcomponent('LGewinn')) do begin left:=links[1]; top:=oben[1]; caption:='Ihr Gewinn beträgt:'; parent:=Ergebnis;
Code:
Danke nochmal an alle für die Hilfe!
dynl:=TLabel.Create(Ergebnis);
dynl.Parent:= Ergebnis; dynl.left:=links[1]; dynl.Top:=oben[1]; dynl.caption:='Ihr Gewinn beträgt:'; p.s. Wünsche einen schönen Nikolaustag :P |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 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 by Thomas Breitkreuz