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

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

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

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, но результатом является то же.

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

10
задан Svein Bringsli 6 August 2010 в 08:38
поделиться

3 ответа

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

procedure TForm2.FormActivate(Sender: TObject);
begin
  ShowMessage('You can''t use this dialog right now.');
  PostMessage(Self.Handle,wm_close,0,0);
end;
13
ответ дан 3 December 2019 в 14:24
поделиться

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

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

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

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

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

4
ответ дан 3 December 2019 в 14:24
поделиться

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

ShowMessage('You can''t use this dialog right now.');
PostMessage(Handle, WM_CLOSE, 0, 0);
modalresult := mrCancel;
17
ответ дан 3 December 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: