调用后:
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表单。在那个类中,我重载了方法Create
和Destroy
。在这些方法中,我使用了WindowList.Add(Self)
和WindowList.Remove(Self)
。
对于WindowsList,我创建了一个新的类,并在该类中编写了方法FindWindow
。