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

Delphi 事件機制實作教學:自訂事件型別、屬性包裝與動態綁定

     編輯:Delphi

事件本質:一種特殊的屬性

Delphi 中的事件本質上是方法指標型別的屬性。事件型別定義參數清單,事件屬性儲存指向具體方法的指標,觸發時呼叫該方法。

完整實作流程

1. 定義事件型別


TMyEvent = procedure of object; // 無參數的物件方法型別

2. 類別內部宣告


TMyClass = class
strict private
  FAge: Integer;
  FOnHundred: TMyEvent; // 事件欄位
  procedure SetAge(const Value: Integer);
public
  constructor Create;
  procedure SetOnHundred1; // 事件處理方法 1
  procedure SetOnHundred2; // 事件處理方法 2
  property Age: Integer read FAge write SetAge;
  property OnHundred: TMyEvent read FOnHundred write FOnHundred; // 事件屬性
end;

3. 建構子與觸發邏輯


constructor TMyClass.Create;
begin
  FOnHundred := SetOnHundred1; // 預設綁定方法 1
end;

procedure TMyClass.SetAge(const Value: Integer);
begin
  if (Value > 0) and (Value < 200) then
    FAge := Value;
  if Value = 100 then
    OnHundred; // 條件觸發事件
end;

4. 事件處理方法實作


procedure TMyClass.SetOnHundred1;
begin
  ShowMessage('祝賀您 100 歲大壽!');
end;

procedure TMyClass.SetOnHundred2;
begin
  ShowMessage('但願我們都能活到 100 歲!');
end;

外部使用:動態切換事件處理方法


// 測試 3:執行期切換事件處理方法
var MyClass: TMyClass;
begin
  MyClass := TMyClass.Create;
  MyClass.OnHundred := MyClass.SetOnHundred2; // 重新指派
  MyClass.Age := 100; // 觸發 SetOnHundred2
  MyClass.Free;
end;

關鍵重點總結

  • 事件型別簽名必須一致:參數個數、型別、順序皆需與定義相符。
  • of object:表示這是綁定實例的方法指標(包含 Self 指標),非靜態函數。
  • 命名慣例:事件屬性慣用 On 前綴(如 OnClick、OnChange)。
  • 系統事件型別:VCL 內建事件多帶參數(如 TNotifyEvent = procedure(Sender: TObject) of object)。

總結

掌握「定義型別 → 宣告欄位 → 包裝屬性 → 條件觸發 → 外部指派」完整流程,即可靈活實作自訂事件,實現元件間鬆耦合通訊。

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