0

调用后:

 Form1.Close();

我怎么知道这个表单是真的关闭了还是已经在FormCloseQuery中使用CanClose:=false取消了?

更新:

为了更好地解释:MainForm可以关闭一个名为Form1的子窗体。所以,我的问题是当MainForm调用Form1.Close()时,MainForm怎么知道 Form1 已经真正关闭并且没有从它的FormCloseQuery 中取消?
如果Form1关闭,则将其销毁。有没有办法在调用Close()后查看Form1是否已被销毁?

4

2 回答 2

0

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

WindowsList: TObjectList<Tform>

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

  WindowList.Add(Self);

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

  WindowList.Remove(Self);

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

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

于 2020-05-08T12:19:48.103 回答
0

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

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

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
  ...
于 2020-05-02T20:09:50.710 回答