Delphi 支援視窗類別繼承,子類表單自動擁有父類表單的所有控件、事件與布局。本文演示如何繼承 TForm1 創建 TMyForm,並在子類中擴展按鈕點擊行為(保留父類邏輯並新增功能)。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
{ 父類表單 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣告 }
public
{ Public 宣告 }
end;
{ 繼承 TForm1 的子類表單 }
TMyForm = class(TForm1)
procedure Button1Click(Sender: TObject); { 覆寫 Button1 點擊 }
end;
var
Form1: TForm1; { 父類實例 }
MyForm1: TMyForm; { 子類實例 }
implementation
{$R *.dfm}
{ TForm1 事件 }
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('TForm1');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
MyForm1 := TMyForm.Create(nil); { 動態創建子類表單 }
MyForm1.Show;
end;
{ TMyForm 事件 }
procedure TMyForm.Button1Click(Sender: TObject);
begin
inherited; { 呼叫父類 TForm1.Button1Click }
ShowMessage('TMyForm'); { 新增行為 }
end;
end.
Form1(含 Button1、Button2)。TForm1。MyForm1(外觀與 Form1 完全一致)。MyForm1 上點擊 Button1:先彈出 TForm1(父類邏輯),再彈出 TMyForm(子類新增邏輯)。MyForm1 上點擊 Button2:再創建一個新的 MyForm1,以此類推。| 機制 | 說明 |
|---|---|
| 控件繼承 | 子類表單 .dfm 隱式包含父類所有控件,無需重複設計。 |
| 事件繼承 | 父類事件處理器自動成為子類的預設處理器。 |
inherited 呼叫 | 在覆寫事件中呼叫 inherited 可執行父類同名事件代碼(參數自動傳遞)。 |
| 動態創建 | TMyForm.Create(nil) 以 Application 為 Owner(或 Self),Show 非模態顯示。 |
Form1,放置 Button1、Button2,編寫事件代碼。Unit1.TForm1,確定生成 TMyForm。TMyForm 設計面上可見父類控件(灰色鎖定),雙擊 Button1 生成覆寫事件。inherited; ShowMessage('TMyForm');。TBaseForm 封裝通用工具列、狀態列、權限檢查、日誌記錄;業務表單繼承並專注業務邏輯。TDarkForm = class(TBaseForm) 覆寫 Create 套用深色配色。TWizardStep1、TWizardStep2 繼承共用導航邏輯。TBaseDialog 統一圖示、按鈕佈局、模態結果處理。Caption、新增控件),父類控件修改會自動傳播。private 字段子類不可直接存取,需用 protected 或屬性。procedure Button1Click(Sender: TObject); 參數順序/類型不可變。TFormA → TFormB → TFormC 皆可,inherited 按最近父類鏈調用。表單繼承是 Delphi RAD 開發的殺手級特性,善用它能大幅減少重複 UI 代碼,統一風格與行為,提升團隊協作效率。