我想要一个从具有自定义构造函数的BaseForm派生的MainForm。由于这是Mainform,因此通过在* .dpr文件中调用Application.CreateForm(TMyMainForm,MyMainForm)来创建它。但是,我的自定义构造函数在窗体创建过程中未被调用。以自定义构造函数作为mainform的Delphi窗体?
很明显,它工作正常,如果我打电话MyMainForm:= TMyMainForm.Create(AOwner)。我可以不使用具有自定义构造函数的窗体作为主窗体吗?
TBaseForm = class(TForm)
constructor Create(AOwner:TComponent; AName:string);reintroduce;
end;
TMyMainForm = class(TBaseForm)
constructor Create(AOwner:TComponent);reintroduce;
end;
constructor TBaseForm.Create(AOwner:TComponent);
begin;
inherited Create(AOwner);
end;
constructor TMyMainForm.Create(AOwner:TComponent);
begin;
inherited Create(AOwner, 'Custom Constructor Parameter');
end;
大多数时候,所有人都试图通过这种方法来做的是通过构造函数初始化派生类中的成员。我不推荐这个。相反,您也可以在派生表单创建后定义公共属性并对它们进行初始化。这是额外的一两行代码,但是又如何? – 2014-10-01 06:26:09
带参数的构造函数的优点是你**必须传递一些东西,所以你不能忘记传递所需的设置。设置属性可以被遗忘。这不是因为人们想要节省输入几行,而只是因为它是更好的策略,IMO。 – 2014-10-01 07:32:03
这个计划的原因正是由Rudy指出的,@RudyVelthuis我的意图是拥有一个共同的基本形式,它具有背景,处理NCHitTest,记住最后的位置,大小等(从注册表中读取/写入)并导出所有未来的项目从那。有没有比上述策略更好的方法? – ss2006 2014-10-01 09:03:14