@fliegermichl:
Dann verstehe ich aber so einiges nicht.
Code: Alles auswählen
procedure TMyForm.FormClose(Sender : TObject; var CloseAction : TCloseAction);
begin
CloseAction := caFree;
MyForm := nil; <---- ????
end;
egal ob nun f1 oder f2 geschlossen wird (unter der Voraussetzung dass die FormularInstanz MyForm zuerstört wurde, also nicht mehr existiert) es muss immer krachen denn ein Zugriff auf MyForm muss ins Leere führen.
ungetestet wäre da vielleicht
Code: Alles auswählen
procedure TMyForm.FormClose(Sender : TObject; var CloseAction : TCloseAction);
begin
CloseAction := caFree;
self := nil;
end;
allgemeiner, aber wohl auch nicht zielführend, denn eigentlich müsste die CloseAction auf caFree gesetzt ja reichen.
Denn im Close der TCustomForm
Code: Alles auswählen
TCustomForm.Close
.....
case CloseAction of
caHide: Hide;
caMinimize: WindowState := wsMinimized;
caFree:
begin
// if form is MainForm, then terminate the application
// the owner of the MainForm is the application,
// so the Application will take care of free-ing the form
// and Release is not necessary
if IsMainForm then
Application.Terminate
else
Release;
end;
......
wird das Formular bei einem caFree ja "released"
was letztlich ein Freigeben des Formulars aus Appliation-Ebene hervorruft.
Code: Alles auswählen
procedure TCustomForm.Release;
begin
if Application <> nil then
Application.ReleaseComponent(Self) <----
else
Free;
end;
https://lazarus-ccr.sourceforge.io/docs ... onent.html
Vermutlich aus alter Gewohnheit der Delphi-Zeiten und weil ich mich besser fühle verwende ich immer freeandnil() um ein geschlossenes Formular auf nil zu setzen.
Aber nach den jetzigem Wissensstand bin ich mir da nicht mehr sicher ob das nötig wäre
Meine Frage also: reicht
CloseAction := caFree; im Close-Event um ein Formular verlässlich zu zerstören und auf
nil zu setzen?