首页 > 解决方案 > 在 C++ Builder 中启动时从加载屏幕打开表单

问题描述

我有一个带有 MainForm 的应用程序,它是一个加载屏幕。此表单会在后台完成某些操作时显示,例如决定下一个启动哪个表单。我无法让它工作,我一直遇到访问冲突错误。

我明白了为什么要感谢这个主题:在 c++ builder 中启动时打开两个表单。但是建议的解决方案对我来说是不可接受的,因为我在设计时不知道首先显示哪个表单。

这样做的正确方法是什么?

标签: c++c++buildervcl

解决方案


我有一个带有 MainForm 的应用程序,它是一个加载屏幕。

不要那样做。在VCL中,MainForm一旦设置就无法更改,MainForm关闭后应用程序将退出。MainForm由第一次调用设置Application->CreateForm()。如果要在创建表单之前创建表单,MainForm则必须使用new运算符,例如:

Application->Initialize();

TLoadingForm *LoadingForm = new TLoadingForm(Application);
LoadingForm->Show();
LoadingForm->Update();

...

Application->CreateForm(__classid(TForm1), &Form1); 
...

LoadingForm->Close();
delete LoadingForm;

Application->Run();
...

如果您想在运行时决定哪个TForm是真实MainForm的,您可以这样做,例如:

Application->Initialize();

TLoadingForm *LoadingForm = new TLoadingForm(Application);
LoadingForm->Show();
LoadingForm->Update();

...

if (someCondition)
    Application->CreateForm(__classid(TForm1), &Form1); 
else
    Application->CreateForm(__classid(TForm2), &Form2); 
...

LoadingForm->Close();
delete LoadingForm;

Application->Run();
...

但是请注意,IDE“拥有”主项目源文件,并且它可能会在项目开发生命周期的某个时刻修改/删除/损坏您的自定义代码。因此,在调用和之间放置的自定义代码要非常小心。并确保您有良好的备份。Application->Initialize()Application->Run()


推荐阅读