表单 – 在主表单之前创建辅助表单,同时将FormMain保留为主表单?

在Delphi 10.1 Berlin IDE中,使用VCL Form应用程序项目,在Project Options对话框中,我有以下设置:

enter image description here

现在我希望在FormMain表单之前创建formOptions表单,同时将FormMain表单保留为主表单.原因是:主窗体可以在其FormCreate过程中加载数据(其中还没有创建formOptions),但是为了处理这些数据,它需要formOptions表单中的设置.

但是一旦我将formOptions项拖到列表顶部,上面的主表单组合框也会更改为formOptions!

那么如何在FormMain表单之前创建formOptions表单,同时将FormMain表单保留为主表单?

解决方法

使用Application.CreateForm()创建的第一个TForm成为VCL的Application.MainForm,并且无法更改.因此,在CreateForm()分配MainForm之前,需要做任何初始化.

您有两种选择:

>从自动创建列表中删除formOptions(从而删除为其生成的CreateForm()调用),然后在代码中自己手动创建它. CreateForm()在完全创建之前不会分配MainForm,因此您可以通过以下两种方式之一实际处理它:

一个.直接在项目的.dpr文件中:

Application.Initialize;
Application.MainFormOnTaskbar := True;
formOptions := TFormOptions.Create(Application);
Application.CreateForm(TFormMain,FormMain);
Application.Run;

湾在MainForm的OnCreate事件中:

procedure TFormMain.FormCreate(Sender: TObject);
begin
  formOptions := TFormOptions.Create(Application); // or even Self
end;

>将您的共享设置移动到TDataModule(甚至是独立的类),然后在创建任一Forms之前(自动)创建该对象.然后,FormMain和formOptions可以在需要时从该对象检索其设置:

Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TSettingsDM,SettingsDM);
Application.CreateForm(TFormMain,FormMain);
Application.CreateForm(TFormOptions,formOptions);
Application.Run;

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些