这里已经讨论过了,但是没有详细讨论。

尝试关闭非模式子窗体时遇到麻烦。我已经通知父母,但是我收到了抽象错误和其他异常。我究竟做错了什么?父级是否必须释放非模式形式,或者从不再尝试通过该变量访问它?

主要形式:

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;

07-24 09:29