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

BCB 利用 Sender 參數實現程式碼重用

     編輯:關於C++

Sender 參數核心價值

面向物件開發工具的特色之一是提高程式碼重用性。BCB 中多數程式碼對應事件處理函數,Sender 參數 (TObject *Sender) 指出觸發事件的控制項,善用它可讓單一事件處理函數服務多個控制項,實現重用。

dynamic_cast 運算子詳解

Delphi 用 is/as 檢測/轉型,BCB 使用 dynamic_cast:

dynamic_cast<T>(ptr)
  • T:目標型別(指標、void*、已定義類別)
  • ptr:來源指標或參考
  • 成功:回傳轉型後指標/參考
  • 失敗:指標回傳 0;參考拋出 bad_cast 例外 (不會當機)

應用場景一:判斷控制項型別,分派不同邏輯

將多個控制項的同一事件 (如 OnClick) 指向同一函數 xxx:

void __fastcall TForm1::xxx(TObject *Sender) {
    if (dynamic_cast<TEdit *>(Sender))
        ShowMessage("This is an EditBox");
    if (dynamic_cast<TLabel *>(Sender))
        ShowMessage("This is a Label");
}

應用場景二:同類控制項共用事件處理

多個 TEdit 共用 OnEnter 事件,進入時清空內容:

void __fastcall TForm1::Edit1Enter(TObject *Sender) {
    TEdit *Edittemp = (TEdit *)(Sender);  // 統一型別
    Edittemp->Text = "";
}

其他 Edit 的 OnEnter 皆指向 Edit1Enter,滑鼠點入即清空。

應用場景三:強制轉型至共同基類,統一操作

TEdit 與 TMemo 同繼承自 TCustomEdit,共用 OnEnter 設定文字:

void __fastcall TForm1::yyy(TObject *Sender) {
    // 寫法一:參考轉型
    dynamic_cast<TCustomEdit &>(*Sender).Text = "Demo text";

    // 寫法二:指標轉型 (推薦)
    dynamic_cast<TCustomEdit *>(Sender)->Text = "Demo text";
}

差異:. 用於參考/物件,-> 用於指標。*Sender 解參考取物件,故用 .;Sender 本身為指標,故用 ->。

總結

善用 Sender 搭配 dynamic_cast,可讓單一函數處理多類控制項,真正體現 BCB 面向物件的重用性。程式碼在 Windows XP / BCB6 測試通過。

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