Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ERLEDIGT - Komponenten nach Schließung entfernen (https://www.delphipraxis.net/164152-erledigt-komponenten-nach-schliessung-entfernen.html)

Alex.G 31. Okt 2011 10:11

Delphi-Version: 7

ERLEDIGT - Komponenten nach Schließung entfernen
 
Moin!

Durch ein Button auf dem Hauptformular öffnet sich ein zweites, auf welchem je nach überlieferten Daten dynamisch Labels und Comboboxen im Show-Ereignis erzeugt werden.
Schließe ich nun das zweite Fenster und öffne es ein zweites Mal, so kommt die Fehlermeldung, dass die Komponente mit dem Namen xy schon existiert.
Mit einem .Free oder .Destroy werden die erstellten Kompontenten leider nicht entfernt.
Wie kann ich diese im Close-Ereignis entfernen?

CCRDude 31. Okt 2011 10:14

AW: Komponenten nach Schließung entfernen
 
Werden Sie mit einem .Free wirklich nicht entfernt, oder wird das .Free evtl. gar nie aufgerufen, weil Du es in einem OnDestroy hast, das nie aufgerufen wird?

Bist Du mit dem Owner-Konzept vertraut? Mit welchem Owner erstellst Du die Komponenten, und warum verlässt Du Dich nicht darauf, daß der sich darum kümmert?

mkinzler 31. Okt 2011 10:14

AW: Komponenten nach Schließung entfernen
 
Wer ist der Owner? Ich würde das Formular auch dynamisch erzeugen oder alle erzeugten Komponenten einem Panel o.ä zuordnen, den ich dann Freigeben würde.

Alex.G 31. Okt 2011 10:16

AW: Komponenten nach Schließung entfernen
 
Zitat:

Zitat von CCRDude (Beitrag 1133655)
Werden Sie mit einem .Free wirklich nicht entfernt, oder wird das .Free evtl. gar nie aufgerufen, weil Du es in einem OnDestroy hast, das nie aufgerufen wird?

Bist Du mit dem Owner-Konzept vertraut? Mit welchem Owner erstellst Du die Komponenten, und warum verlässt Du Dich nicht darauf, daß der sich darum kümmert?

Delphi-Quellcode:
cbTables := TComboBox.Create(self);
.Free benutze ich im OnClose-Ereignis.

mkinzler 31. Okt 2011 10:18

AW: Komponenten nach Schließung entfernen
 
.Free auf was?

Bummi 31. Okt 2011 10:18

AW: Komponenten nach Schließung entfernen
 
Entweder Du gibst das Formular komplett frei (FreeAndNil) wenn Du es schließt, oder Du schaust vor dem Erzeugen ob die Komponenten nicht schon das sind, oder Du gibst sie wirklich frei.
Wie erzeugst Du sie (Owner)?
Wie gibst Du sie (vermeindlich) frei?
Kannst Du mal die entsprechenden Codestellen einstellen?

Alex.G 31. Okt 2011 10:18

AW: Komponenten nach Schließung entfernen
 
Zitat:

Zitat von mkinzler (Beitrag 1133658)
.Free auf was?

Delphi-Quellcode:
cbTables.Free;
Auf die erstellten Kompontenten.

CCRDude 31. Okt 2011 10:22

AW: Komponenten nach Schließung entfernen
 
Erstmal: wie stellst Du denn sicher, daß das Form-Objekt beim Schließen auch freigegeben wird?

Weiter, siehe Anwerkung in Sachen Owner: warum gibst Du die Form als Owner an, wenn Du das dann auch noch selber freigibst?

Alex.G 31. Okt 2011 10:33

AW: Komponenten nach Schließung entfernen
 
Danke für die schnelle hilfe. :thumb:

Ich lasse das Formular nun nicht mehr automatisch erzeugen, sondern nur noch per ButtonClick, da es sonst im Hintergrund weiterläuft, richtig?

mkinzler 31. Okt 2011 10:36

AW: Komponenten nach Schließung entfernen
 
Ja, beim Schliessen bleibt es bestehen.


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