从我的应用程序中我想打开一个对话框,在某些情况下应该立即关闭(在短消息之后).
我试过这个:
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)
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)
打开表单之前先检查一下特定情况,而不打开它不是更容易吗?
我看不到表单保持打开状态的原因,它应该在单击OK显示消息对话框后立即消失。
showmessage 被阻塞,因此您将无法关闭,直到确定为止(如果您需要在此之前关闭,那么您可以返回不同的模式结果(或者自己创建与 mrUnavailable 等现有结果不冲突的结果) = 12). 然后,如果 ModalResult 为 mrunavailable,您就可以显示该消息。
如果它正在运行代码并且只是没有关闭,那么尝试使用Release而不是关闭。
编辑:如果您在多个地方重复使用相同的表单,请不要使用 Release,除非您想每次都重新创建表单!按照其他人的建议发布关闭消息