BCB高手進階 (十)用Sender引數實現程式碼重用 (轉)
BCB高手進階
(十)用Sender引數實現程式碼重用
to:nxyc_twz@163.com">nxyc_twz@163.com
面向的工具的特點之一就是要提高程式碼重用性(Reuse),BCB當然可以實現這一功能。我們都知道,在BCB中,大部分程式碼都直接或間接的對應著一個事件,此程式稱為事件處理控制程式碼,它實際上就是一個過程。從應用程式的工程到視窗、和程式,BCB強調的是其開發過程中每一層次的重用性,可以充分利用已編寫過的程式碼來減少工作量,更會使你的程式變得優美。程式碼段間的共享都跟發生該事件的有關,需要根據控制元件型別做出相應的處理,這時就要用到Sender引數。
每個的開頭都有形如:
void _fastcall Tform1::Button1Click(T *Sender)
其中的Sender是一個Tobject型別的引數,它告訴BCB哪個控制元件接收到這個事件並相應的處理過程。我們可以編寫一個單一的事件處理控制程式碼,透過Sender引數和if語句或者case語句配合,來處理多個元件。在中可以用IS來測試Sender型別,或者用AS進行型別轉換,BCB我們只在用dynamic_cast來進行上面兩個工作,下面把dynamic_cast的用法說明一下。
dynamic_cast 可以把某種物件強制轉成另一個類,型別轉換成功則返回一個值是0的指標,失敗則丟出一個異常處理資訊:Bad_cast,但你放心不會導致當機,所以可以放心使用。其程式:
dynamic_cast
T引數一定要是一個指標、void 、或是已經定義過的類,而ptr引數則必須是一個指標(pointer) 或是一個引用(reference)。如果T的型別是void,那麼ptr則是一個可以訪問最下面類裡的任何成員,當然這樣的類將不可以是基礎類。
1.進行判斷
我們用dynamic_case來測試Sender,以便找到呼叫這個事件的處理控制程式碼或元件的型別。如,並視窗編輯框和標籤的Click事件的處理控制程式碼都指向視窗的xxx函式,編輯框和標籤對Click事件有不同的反應:
void _fastcall TForm1::xxx(Tobject *Sender)
{
if(dynamic_cast
showmessage(“This is a editbox”);
if(dynamic_cast
showmessage(“This is a label”);
}
2.強制進行型別轉換
將若干繼承同一父類的子類強制轉換成該父類。如視窗中有一個TEdit類控制元件和一個TMemo控制元件,它們實際上都繼承於TCustomEdit類,如果你要為二者的某一事件提供同樣的處理,可以將二者事件控制程式碼都指向自定義的函式yyy:
void _fastcall TForm1::yyy(Tobject *Sender)
{
dynamic_cast
}
在這裡,先把TEdit類和TMemo類均強制轉換成TCustomEdit類,再對其父類的屬性進行賦值。
使用Sender引數可以透過單一函式段處理多類元件,真正體現了BCB的物件導向的重用性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982759/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- BCB中用Sender引數實現程式碼重用 (轉)
- BCB中用Sender實現程式碼重用(糾正篇) (轉)
- C++ Builder 高手進階 (五)用BCB編寫多執行緒應用程式 (轉)C++UI執行緒
- AngularJS進階(八)實現頁面跳轉並進行引數傳遞AngularJS
- 用C#程式碼實現二進位制與十進位制的互相轉換C#
- C#程式碼實現對HTTP POST引數進行排序C#HTTP排序
- BCB中實現動態建立元件 (轉)元件
- js實現的十進位制和十六進位制相互轉換程式碼例項JS
- Java實現BCD編碼與十進位制轉換Java
- pytest 引數化進階
- 14.程式程式設計進階:函式的引數程式設計函式
- 用BCB編寫身份證號識別程式 (轉)
- 用餘3碼錶示十進位制數
- Java 抽象類與方法:實現安全性與程式碼重用Java抽象
- js將二進位制數字轉換為十進位制程式碼例項JS
- js高手進階之路:underscore原始碼經典(完)JS原始碼
- js高手進階之路:underscore原始碼經典(二)JS原始碼
- js高手進階之路:underscore原始碼經典(一)JS原始碼
- js高手進階之路:underscore原始碼經典(三)JS原始碼
- 科學計數法字串轉為對應的十進位制程式-C程式碼字串C程式
- 百練OJ:4003:十六進位制轉十進位制(python三行程式碼實現)Python行程
- js二進位制和十進位制轉換程式碼JS
- Linux-高手進階之路Linux
- 十進位制轉換任意進位制--鏈棧實現
- 十六進位制數轉十進位制
- 在BCB中使用向量實現控制元件陣列 (轉)控制元件陣列
- PHP中將ip地址轉成十進位制數的兩種實用方法PHP
- 提高Java程式碼可重用性的三個措施 (轉)Java
- 用c語言實現輸入一個十進位制數,計算其轉換為二進位制數後其中包含1的個數C語言
- 【機器學習】求解邏輯迴歸引數(三種方法程式碼實現)機器學習邏輯迴歸
- javascript將引數轉換為數值程式碼詳解JavaScript
- 資源 | 數十種TensorFlow實現案例彙集:程式碼+筆記筆記
- TypeScript 引數簡化實戰(進階知識點conditional types,中高階必會)TypeScript
- 十行程式碼實現牛頓方法行程
- 攻防世界web高手進階之blgdelWeb
- 攻防世界web高手進階18(mfw)Web
- xctf-web(高手進階區)-supersqliWebSQL
- vue + axios 實現分頁引數傳遞,高階搜尋功能實現VueiOS