这里已经讨论过了,但是没有详细讨论。
尝试关闭非模式子窗体时遇到麻烦。我已经通知父母,但是我收到了抽象错误和其他异常。我究竟做错了什么?父级是否必须释放非模式形式,或者从不再尝试通过该变量访问它?
主要形式:
NonModal := NonModalTForm.Create(Self);
NonModal.Callback := Callback;
NonModal.Show;
Procedure TForm.Callback; // called by non-modal form when closing
begin
FreeAndNil(NonModal); // or should this just be NonModal := nil so I don't try to access a dangling pointer?
end;
在NonModal.pas中
procedure NonModalTForm.FormClose;
begin
Callback; // calls parent
end;
最佳答案
您调用close
以从FormClose事件以外的其他位置关闭表单。在FormClose事件中,只需将Action设置为以下值之一:caFree
-完全处理表格caMinimize
-最小化形式caHide
-隐藏表单caNone
-忽略关闭
例如:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;