首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 表單繼承實戰:繼承 TForm1 創建 TMyForm 並擴展按鈕行為

     編輯:Delphi

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.

運行效果

  1. 啟動程式,顯示 Form1(含 Button1、Button2)。
  2. 點擊 Button1:彈出 TForm1。
  3. 點擊 Button2:創建並顯示 MyForm1(外觀與 Form1 完全一致)。
  4. 在 MyForm1 上點擊 Button1:先彈出 TForm1(父類邏輯),再彈出 TMyForm(子類新增邏輯)。
  5. 在 MyForm1 上點擊 Button2:再創建一個新的 MyForm1,以此類推。

核心機制解析

機制說明
控件繼承子類表單 .dfm 隱式包含父類所有控件,無需重複設計。
事件繼承父類事件處理器自動成為子類的預設處理器。
inherited 呼叫在覆寫事件中呼叫 inherited 可執行父類同名事件代碼(參數自動傳遞)。
動態創建TMyForm.Create(nil) 以 Application 為 Owner(或 Self),Show 非模態顯示。

設計時操作步驟(IDE)

  1. 設計 Form1,放置 Button1、Button2,編寫事件代碼。
  2. 選單 File → New → Other → Inheritable Items → Form。
  3. 在「繼承自」對話框選擇 Unit1.TForm1,確定生成 TMyForm。
  4. 在 TMyForm 設計面上可見父類控件(灰色鎖定),雙擊 Button1 生成覆寫事件。
  5. 編寫 inherited; ShowMessage('TMyForm');。

進階應用場景

  • 基礎表單框架:TBaseForm 封裝通用工具列、狀態列、權限檢查、日誌記錄;業務表單繼承並專注業務邏輯。
  • 皮膚/主題變體:TDarkForm = class(TBaseForm) 覆寫 Create 套用深色配色。
  • 向導式表單:TWizardStep1、TWizardStep2 繼承共用導航邏輯。
  • 對話框家族:TBaseDialog 統一圖示、按鈕佈局、模態結果處理。

注意事項

  • .dfm 繼承:子類 .dfm 僅存儲差異屬性(如 Caption、新增控件),父類控件修改會自動傳播。
  • 私有字段不可見:父類 private 字段子類不可直接存取,需用 protected 或屬性。
  • 事件覆寫簽名必須一致:procedure Button1Click(Sender: TObject); 參數順序/類型不可變。
  • 多層繼承:TFormA → TFormB → TFormC 皆可,inherited 按最近父類鏈調用。

表單繼承是 Delphi RAD 開發的殺手級特性,善用它能大幅減少重複 UI 代碼,統一風格與行為,提升團隊協作效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved