使用Application.CreateForm()
方法创建的第一个TForm
将成为VCL的Application.MainForm
,并且不能更改。因此,在CreateForm()
分配MainForm
之前,您需要进行任何初始化操作。
您有两个选项:
从自动创建列表中删除formOptions
(从而删除生成的CreateForm()
调用),然后在代码中手动创建它。 CreateForm()
直到完全创建后才会分配MainForm
,因此您实际上可以通过以下两种方式之一来处理此问题:
a. 直接在项目的.dpr
文件中:
Application.Initialize;
Application.MainFormOnTaskbar := True;
formOptions := TFormOptions.Create(Application);
Application.CreateForm(TFormMain, FormMain);
Application.Run;
b. 在 MainForm 的 OnCreate 事件中:procedure TFormMain.FormCreate(Sender: TObject);
begin
formOptions := TFormOptions.Create(Application); // or even Self
end;
将您的共享设置移至TDataModule
(甚至是一个独立的类),然后在创建任何表单之前(自动)创建该对象。当需要时,FormMain
和formOptions
可以从那个对象中检索它们的设置。Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TSettingsDM, SettingsDM);
Application.CreateForm(TFormMain, FormMain);
Application.CreateForm(TFormOptions, formOptions);
Application.Run;
DPR
项目文件中吗? - user1580348nil
作为AOwner
,因为主窗体还没有被创建:formOptions := TformOptions.Create(nil);
。在程序中使用nil
作为所有者是正确的吗?我需要在程序结束时手动销毁formOptions
吗? - user1580348Application
作为所有者。如果您使用nil
所有者,那么您必须手动释放该表单。 - Remy Lebeau