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

Sve*_*sli 10 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;
Run Code Online (Sandbox Code Playgroud)

但对话框保持打开状态.我也尝试将代码放在OnShow事件中,但结果是一样的.

为什么这不起作用?

Ser*_*yuz 17

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

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

  • @Svein - 在这里,SO显示我的答案以37秒击败了他.但无论如何它足够接近不要大惊小怪.:-) (2认同)
  • 正如爱因斯坦所说:时间的感知取决于你的速度. (2认同)

Bha*_*rat 13

试试这个

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


Jam*_*ass 5

打开表单之前先检查一下特定情况,而不打开它不是更容易吗?

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

showmessage 被阻塞,因此您将无法关闭,直到确定为止(如果您需要在此之前关闭,那么您可以返回不同的模式结果(或者自己创建与 mrUnavailable 等现有结果不冲突的结果) = 12). 然后,如果 ModalResult 为 mrunavailable,您就可以显示该消息。

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

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

  • 然后使用可以从多个地方调用的方法。在该方法中进行检查,如果正常,则仅打开表单 (5认同)