![]() |
TComponentList: Komponenten sauber freigeben
Hallo zusammen
Leider finde ich im Netz nirgendwo eine Antwort auf meine Frage... daher wende ich mich an die Spezialisten. - Ich erstelle eine TComponentList mit Create(True) - Ich erstelle dynamisch irgendwelche Komponenten ...TPanel, TButton, ... - Ich trage diese Komponenten in eine TComponentList ein (Add(...)). - Ich gebe die TComponentList frei (free) ...folglich sollten alle erstellten Komponenten wieder freigegeben werden. Meine Fragen: - Wie sauber gibt TComponentList diese Komponenten wieder frei? - Spielt es eine Rolle ob ich "TPanel(MyComponentList.Items[i]).Free" oder "MyComponentList.Items[i].Free" mache? Meiner Meinung nach wäre die Variante "TPanel(MyComponentList.Items[i]).Free" richtig. Denn eine TPanel kann noch Objekte enthalten die in einer TComponent nicht enthalten sind. Vielen Dank für eure Antworten! |
AW: TComponentList: Komponenten sauber freigeben
Free ruft Destroy auf, Destroy ist virtual, somit wird immer das Destroy aller abgeleiteten Klassen aufgerufen (es sei denn, jemand hat vergessen das inherited aufzurufen).
|
AW: TComponentList: Komponenten sauber freigeben
Herzlichen Dank Uwe!
Stimmt, das macht natürlich Sinn. Somit kann man gut "MyComponentList.Items[i].Free" aufrufen und kann sicher sein, dass alle zusätzlichen Objekte von TPanel freigegeben werden. |
AW: TComponentList: Komponenten sauber freigeben
Moin...8-)
Zitat:
Zitat:
|
AW: TComponentList: Komponenten sauber freigeben
Klar haentschman, da hast du natürlich Recht. Falls OwnedObjects = True erübrigt sich der Freigabe-Befehl. So hatte ich das auch gemeint.
|
AW: TComponentList: Komponenten sauber freigeben
Wobei sich die Frage stellt, ob die ComponentList überhaupt notwendig ist. Ich habe noch nie eine gebraucht, weil ich Komponenten zwar zur Laufzeit erstelle, aber nicht mehr per Code freigebe. Das überlasse ich in der Regel dem Formular (oder dem Container), dem ich sie zugeordnet habe.
Nur so als Denkanstoß, vielleicht ist das in diesem Fall ja auch so. |
AW: TComponentList: Komponenten sauber freigeben
Tatsächlich? Ist das so, dass wenn kaskadierte Komponenten in einem bestehenden TWinControl(TForm, TPanel, TabSheet, ...) platziert wurden, diese kaskadierte Komponenten automatisch freigegeben werden sobald der Top-Owner freigegeben wird?
|
AW: TComponentList: Komponenten sauber freigeben
Zitat:
|
AW: TComponentList: Komponenten sauber freigeben
Zitat:
Für Controls spielt aber auch der Parent eine Rolle; TWinControl zerstört automatisch alle Controls in seiner Controls-Liste (die also dieses TWinControl als Parent haben) wenn es selbst zerstört wird. Das kommt bei den meisten Anwendungen zum Tragen bevor die Ownership greift. Ist ein bißchen doppelt gemoppelt, ist aber notwendig, da TWinControls ja ein Window handle haben und Windows dieses Verhalten auch auf der "handle-Ebene" erzwingt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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-2025 by Thomas Breitkreuz