forms - 在 Delphi 中销毁一个窗体并显示另一个窗体的正确方法

标签 forms delphi procedure creation destruction

目前,在我的程序中,我有一个启动表单和一个主表单。启动表单显示一两秒。

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

  frmStartup.Destroy;

  frmMain := TfrmMain.Create(Self);
  frmMain.Show;

现在,我不确定这是否是正确的方法。它有效,但是在调用 application.Terminate(); 时 我收到一条访问冲突消息,让我相信我在破坏启动表单时做错了什么。

如果有人可以展示做我想做的事情的正确程序(非模态),我将不胜感激。

提前致谢,

编辑:

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

  Action := caFree;

进入frmStartup.formClose方法。

最佳答案

不要使用Application.CreateForm创建frmStartup。在那里创建的第一个表单将成为应用程序的主表单,如果它是 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.

关于forms - 在 Delphi 中销毁一个窗体并显示另一个窗体的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266130/

相关文章:

multithreading - 同步似乎挂起线程

scheme - 麻省理工学院计划传递消息等级表

MySQL 过程语法

python - 将 Django 上下文处理器与表单一起使用

php - mysql & php - 查询具有全部或更少值但不能更多的记录

javascript - 将(大量公式加载的)Excel 电子表格转换为用户友好的网络计算器

delphi - 使用 indy/delphi 保护 ftp -> 文件上传和下载

php - 如何创建新的页面/数据库条目,然后将新的 "page id"传递到另一个页面?

delphi - 使用Developer Express中的QuantumGrid(TcxGrid)的文档用户界面

php - MySQLi mysqli 获取数组关联替换不起作用