正确的方法来销毁一个表单并在Delphi中显示另一个表单

Jam*_*mes 6 forms delphi procedure creation destruction

目前在我的程序中,我有一个Startup表单和一个Main表单.启动表单显示一两秒钟.

现在,我在计时器中有以下代码:

  frmStartup.Destroy;

  frmMain := TfrmMain.Create(Self);
  frmMain.Show;
Run Code Online (Sandbox Code Playgroud)

现在,我不确定这是否是正确的方法.它可行,但在调用时application.Terminate(); 我收到一条访问违规消息,导致我相信我在破坏启动表单时做错了什么. .

如果有人能够显示正确的程序来做我想要的(非模态),我将不胜感激.

提前致谢,

编辑:

感谢所有反馈,我通过简单地添加代码修复了访问冲突:

  Action := caFree;
Run Code Online (Sandbox Code Playgroud)

进入frmStartup.formClose方法.

Ken*_*ite 8

不要创建frmStartup使用Application.CreateForm.在那里创建的第一个表单成为您的应用程序的主要表单,如果那是frmStartup您在Application知识之外销毁它.

而是在项目源(.dpr)文件中使用普通的Form.Create:

var
  frmStartup: TfrmStartup;

begin
  Application.Initialize;
  Application.MainFormOnTaskBar := True;
  frmStartup := TfrmStartup.Create(nil);  // No owner assigned here!
  frmStartup.Show;
  frmStartup.Update;

  Application.CreateForm(TfrmMain, frmMain); // Let Application have this for main form
  // Delay here if needed
  frmfrmStartup.Free;
  Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)

  • 要使过程尽可能紧,请定义Windows消息并在启动表单中放置一个消息处理程序,以便在收到消息时释放它.然后从主窗体的OnShow方法发送该消息. (4认同)