![]() |
Komponenten und deren Freigabe
Hiho,
ich habe folgendes Problem: in zb.Formx werden Edit's dynamisch erstellt und benannt. Der Inhalt deren kann gespeichert werden und das Form wieder geschlossen werden.So weit, so gut. Wird dieses Form kurz danach wieder aufgerufen wird eine Exeption ausgelöst und als Grund angegeben das Edit'xxx' schon exisitiert. Also gehe ich der Annahme das nach dem Schliessen des Forms die erstellten Edit's noch im Speicher existieren. Was muss beim schliessen des Forms beachtet werden?? |
Re: Komponenten und deren Freigabe
Die Edits werden bei der Freigabe des Parent-Objektes freigegeben, also i.d.R. bei FormDestroy.
|
Re: Komponenten und deren Freigabe
Hallo Chewie´,
das ist nicht ganz richtig. Die Komponenten werden freigegeben, wenn der Besitzer freigegeben wird. Der Besitzer muss nicht unbedingt der Parent sein. Wenn ein TEdit auf einem Panel liegt und das Panel auf einem Formular dann ist das Panel der Parent und das Formular der Besitzer. Bei zur Designzeit erzeugten Komponenten ist in der Regel der Formular der Besitzer. Wird die Komponente zur Laufzeit erzeugt entscheidet der Paramter des constructors über den Besitzer. procedure TForm1.CreateEdit; begin Edit:=TEdit.Create(Self); // Formular ist der Besitzer, Komponente wird freigeben wenn das Formular zerstört wird. end; procedure TForm1.CreateEdit; begin Edit:=TEdit.Create(Nil); Komponente hat keinen Besizter, Komponente wird nicht freigeben wenn das Formular zerstört wird. end; |
Re: Komponenten und deren Freigabe
Autsch :oops:
Ich habe deutsch gedacht und den englischen Begriff geschrieben - das ging nicht gut. Danke für die Korrektur. |
Re: Komponenten und deren Freigabe
Hiho
in diesem Falle: myedit := TEdit.Create(Form9); wird das Form als Besitzer deklariert. Nach der Aussage müssten ja die Edits zerstört werden wenn das Form zerstört wird. Trotzdem kommt es zu diesen Fehlermeldungen. Zusätzlich habe ich folgendes probiert (ohne Erfolg):
Delphi-Quellcode:
procedure TForm9.Beenden1Click(Sender: TObject);
begin close; Form9.Free; end; |
Re: Komponenten und deren Freigabe
Hai Privateer,
hast Du schon einmal versucht die von dir Erzeugten Objekt im OnClose Event der Form expliziet freizugeben? |
Re: Komponenten und deren Freigabe
hab ich auch schon probiert.Vielleicht sollte man andere Arten ausprobieren.
Verhalten sich zum Beispiel Frames anders als Forms?? |
Re: Komponenten und deren Freigabe
Hallo Privateer3000,
wie erzeugst Du das Formular? Poste doch mal ein bisschen Source. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 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