我有一个带有MainForm的应用程序,它是一个加载屏幕。当在后台完成某些工作时(例如确定下一个要启动的表单),将显示此表单。我无法使它正常工作,我一直遇到访问冲突错误。
我知道为什么要感谢这个主题:Open two forms at startup in 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()
调用之间放置的自定义代码非常小心。并确保备份良好。