如何在Delphi中检查表单是否已关闭



调用后:

Form1.Close();

我如何知道这个表单是真的关闭了,还是在FormCloseQuery中使用CanClose:=false取消了?

更新:

为了更好地解释:有MainForm可以关闭名为Form1的子窗体。所以,我的问题是,当MainForm调用Form1.Close((时,MainFormormCloseQuery中取消
Form1如果关闭,它将被销毁。有没有办法在调用Close((后查看Form1是否已被销毁?

Form1如果关闭,它将被销毁。有没有办法在调用Close((后查看Form1是否已被销毁?

在这种情况下,在Form1的OnDestroy事件中,您可以将全局Form1变量设置为nil,然后在需要时检查Form1是否为nil

var
Form1: TForm1;
...
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := ...;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Form1 := nil;
end;
...
if Form1 <> nil then
...

我使用决策,它可以帮助您。您可以声明新的全局变量(容器(,它将保存您的窗口。

WindowsList: TObjectList<Tform>

对于事件OnCreate,您可以执行以下操作:

WindowList.Add(Self);

对于事件OnDestroy,您可以执行:

WindowList.Remove(Self);

当您需要查找窗口时,您将遍历列表并查找必要的窗口,例如,通过Tag和ClassName。在我的案例中,我编写了一个新的类,它继承了TForm,并将其用于MdiChild表单。在那个类中,我重载了方法CreateDestroy。在这些方法中,我使用了WindowList.Add(Self)WindowList.Remove(Self)

对于WindowsList,我创建了一个新的类,并在该类中编写了方法FindWindow

相关内容

最新更新