c++ - 在 C++ Builder 中启动时从加载屏幕打开表单
问题描述
我有一个带有 MainForm 的应用程序,它是一个加载屏幕。此表单会在后台完成某些操作时显示,例如决定下一个启动哪个表单。我无法让它工作,我一直遇到访问冲突错误。
我明白了为什么要感谢这个主题:在 c++ builder 中启动时打开两个表单。但是建议的解决方案对我来说是不可接受的,因为我在设计时不知道首先显示哪个表单。
这样做的正确方法是什么?
解决方案
我有一个带有 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()
推荐阅读
- django - ValueError:字段 'id' 需要一个数字,但得到了 'asd'
- mongodb - Mongo DB过滤器查询不适用于nodejs,表达猫鼬应用程序堆栈
- javascript - angular 5中如何实现Buffer.alloc()和Buffer.from()
- android - 使用 AAPT2 包含多个资源源的正确方法是什么?
- html - 外部文件中的 SVG 图标未在 Firefox 中呈现
- python - python3中的语法For
- flutter - 如何知道 SwitchListTile 中的字幕是否为两行或多行?
- ssh - 从 Ansible 在目标服务器上堆积的开放 ssh 连接的问题
- php - docker-compose mysql 拒绝用户 symfony@'172.18.0.1' 的访问
- c# - 如何让程序的下一部分在某个时间运行?