Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Alle Komponenten in Groupbox löschen (https://www.delphipraxis.net/35100-alle-komponenten-groupbox-loeschen.html)

Dreas 2. Dez 2004 18:21


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:
form1.Ergebnis.DestroyComponents;
probiert. Geht aber nicht. Nun weiß ich nicht weiter...

Dax 2. Dez 2004 18:23

Re: Alle Komponenten in Groupbox löschen
 
Hast du auch das hier getan?
Delphi-Quellcode:
dynLabel.Parent := Form1.GroupErgebis;

Dreas 2. Dez 2004 18:49

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?

Jasocul 2. Dez 2004 18:53

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).

Dax 2. Dez 2004 18:54

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:
dynLabel := TLabel.Create(Ereignis);
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.

MaBuSE 2. Dez 2004 20:26

Re: Alle Komponenten in Groupbox löschen
 
Zitat:

Zitat von Dreas
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.

Den Parrent zu setzen reicht nicht !!!
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:
  ...
  l := TLabel.Create(Form1);
  l.Parent := Ergebnis;
  ...
  Ergebnis.DestroyComponents; // bringt nichts !!!
  ...

  l := TLabel.Create(Ergebnis);
  l.Parent := Ergebnis;
  ...
  Ergebnis.DestroyComponents; // jetzt klappts !!!
  ...
[edit]
ups, hallo Dax, habe Deine Antwort gar nicht gesehen :oops:
Sorry für den unnötigen Post
[/edit]

Jasocul 2. Dez 2004 20:33

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:

Dreas 6. Dez 2004 13:23

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:
TLabel.Create(Ergebnis).Name := 'LGewinn';
with tlabel (findcomponent('LGewinn')) do begin
left:=links[1];
top:=oben[1];
caption:='Ihr Gewinn beträgt:';
parent:=Ergebnis;
Jetzt habe ich es so gemacht, wie Ihr geschrieben habt (var dynl:tlabel):
Code:
dynl:=TLabel.Create(Ergebnis);
dynl.Parent:= Ergebnis;
dynl.left:=links[1];
dynl.Top:=oben[1];
dynl.caption:='Ihr Gewinn beträgt:';
Danke nochmal an alle für die Hilfe!

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