Как проверить, закрыта ли форма в Delphi? - PullRequest
0 голосов
/ 02 мая 2020

После вызова:

 Form1.Close();

Как я могу узнать, действительно ли эта форма была закрыта или была отменена в FormCloseQuery с использованием CanClose: = false ?

ОБНОВЛЕНИЕ:

Для лучшего объяснения: существует MainForm , который может закрывать дочернюю форму с именем Form1 . Итак, мой вопрос, когда MainForm вызывает Form1.Close () , как MainForm может знать, что Form1 действительно закрыта и не отменена из FormCloseQuery ?
Form1 уничтожается, если он закрыт. Есть ли способ узнать, был ли Form1 уничтожен после вызова Close () ?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Я использую решение, которое может вам помочь. Вы можете объявить новую глобальную переменную (контейнер), которая сохранит ваши windows.

WindowsList: TObjectList<Tform>

И для события OnCreate вы можете сделать следующую операцию:

  WindowList.Add(Self);

И для событие OnDestroy вы можете сделать:

  WindowList.Remove(Self);

И когда вам нужно найти окно, вы будете перебирать список и находить нужное окно, например, по тэгу и ClassName. В моем случае я написал новый класс, который наследует TForm, и использую его для форм MdiChild. В этом классе я перегружал методы Create и Destroy. И в этих методах я использую WindowList.Add(Self) и WindowList.Remove(Self).

И для WindowsList я создал новый класс, и в этом классе я написал метод FindWindow.

0 голосов
/ 02 мая 2020

Форма 1 уничтожается, если она закрыта. Есть ли способ узнать, была ли Form1 уничтожена после вызова Close () ?

В этом случае в событии OnDestroy в Form1 вы можно установить для глобальной переменной 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
  ...
...