以下是需要翻译的内容:
情况如下:在应用程序主表单创建事件中,有些条件没有被满足,因此应用程序需要关闭。
是的,这是一个糟糕的设计,但应用程序应该如何关闭?使用Application.MainForm.Close会生成AV。Application.Terminate 不是一个很好的选择。还有其他想法吗?
情况如下:在应用程序主表单创建事件中,有些条件没有被满足,因此应用程序需要关闭。
是的,这是一个糟糕的设计,但应用程序应该如何关闭?使用Application.MainForm.Close会生成AV。Application.Terminate 不是一个很好的选择。还有其他想法吗?
Application.Terminate
可以正常工作。不过请注意,它是一种延迟终止方式,它只是向调用线程的消息队列中发布了一个 WM_QUIT
消息,因此应用程序直到调用 Application.Run()
开始处理主线程的消息队列时才会真正终止。因此,您可能会在应用程序实际终止之前瞥见 MainForm 在屏幕上闪烁。如果您希望避免这种情况,可以将 Application.ShowMainForm
属性设置为 false,例如:
procedure TMainForm.FormCreate(Sender: TObject);
begin
if (some condition) then
begin
Application.ShowMainForm := False;
Application.Terminate;
end;
end;
然而,正如其他人所说,更好的设计是在项目的DPR文件中进行检查,如果必要的话根本不创建主表单,例如:
Application.Initialize;
if not (some condition) then
begin
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end;
如果你想坚持你的糟糕设计,那么这里有一个糟糕的答案:
try
Application.Terminate
except
end;
Application.Terminate
除非您在创建表单时(在DPR中)检查这些条件,否则默认设置就足够好了。
Application.Terminate
确实有效。但是最好将代码编写在 .DPR 文件中,而不是主窗体的OnCreate
事件处理程序中... - Andreas RejbrandApplication.Run
的.dpr
代码。例如,你可以在.dpr
文件中使用exit
来退出。 - David Heffernan