打开后如何关闭模态表格?

时间:2010-08-06 08:38:17

标签: delphi dialog

从我的应用程序中,我希望打开一个对话框,在某些情况下应该立即关闭(在短信之后)。

我试过这个:

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 个答案:

答案 0 :(得分:17)

发布WM_CLOSE消息,而不是直接调用close;

ShowMessage('You can''t use this dialog right now.');
PostMessage(Handle, WM_CLOSE, 0, 0);
modalresult := mrCancel;

答案 1 :(得分:11)

尝试这个

procedure TForm2.FormActivate(Sender: TObject);
begin
  ShowMessage('You can''t use this dialog right now.');
  PostMessage(Self.Handle,wm_close,0,0);
end;

答案 2 :(得分:4)

在表单打开之前检查某些情况并且不打开它会不会更容易吗?

我无法看到表单保持打开的原因,在显示消息对话框中单击OK后,它应立即消失。

showmessage是封锁的,所以你不能关闭,直到那个没关系(如果你需要关闭之前你可以返回一个不同的模态结果(或你自己的,不会与现有的冲突)像mrUnavailable = 12那样的。如果ModalResult是mrunavailable,你可以显示消息。

如果它正在运行代码并且没有关闭,那么请尝试使用Release而不是关闭。

编辑:如果您在多个地方重复使用相同的表单,请不要使用Release,除非您想每次都重新创建表单!发布其他人建议的关闭消息

答案 3 :(得分:0)

您可以尝试使用计时器:

  • 将计时器设置为低间隔(20)
  • on OnTimer事件,关闭表单;
  • 启用FormActivate事件上的计时器