我想要一個從具有自定義構造函數的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