Как закрыть модальную форму сразу после ее открытия? - PullRequest
10 голосов
/ 06 августа 2010

Из моего приложения я хочу открыть диалоговое окно, которое при некоторых обстоятельствах должно закрываться немедленно (после короткого сообщения).

Я пробовал это:

procedure TForm2.FormActivate(Sender: TObject);
begin
  if SomeCondition then
  begin
    ShowMessage('You can''t use this dialog right now.');
    close;
    modalresult := mrCancel;
  end;
end;

но диалог остается открытым. Я также пытался поместить код в событие OnShow, но результат тот же.

Почему это не работает?

Ответы [ 4 ]

17 голосов
/ 06 августа 2010

Публиковать сообщение WM_CLOSE вместо прямого вызова close;

ShowMessage('You can''t use this dialog right now.');
PostMessage(Handle, WM_CLOSE, 0, 0);
modalresult := mrCancel;
11 голосов
/ 06 августа 2010

попробуйте это

procedure TForm2.FormActivate(Sender: TObject);
begin
  ShowMessage('You can''t use this dialog right now.');
  PostMessage(Self.Handle,wm_close,0,0);
end;
4 голосов
/ 06 августа 2010

Не проще ли проверить определенные обстоятельства до того, как форма откроется, а не открыть ее?

Я не вижу причины, по которой форма остается открытой, она должна исчезнуть сразу после нажатияOK в диалоговом окне показа сообщения.

Showmessage блокируется, поэтому вы не сможете закрыть, пока все не будет в порядке (если вам нужно закрыть раньше, вы можете вернуть другой модальный результат (илисоздайте свой собственный, который не конфликтует с существующими, такими как mrUnavailable = 12). Затем вы можете показать сообщение, если ModalResult был mrunavailable.

Если он запускает код и просто не закрывается, то попробуйте использоватьRelease вместо закрытия.

Редактировать: если вы повторно используете одну и ту же форму в нескольких местах, не используйте Release, если вы не хотите заново создавать форму каждый раз!сообщение, как другие предложили

0 голосов
/ 26 мая 2016

Вы можете попробовать таймер:

  • установить таймер на низкий интервал (20)
  • в событии OnTimer, закройте форму;
  • включить таймер для события FormActivate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...