呼叫event的sender討論
来源:互联网 发布:mac产品介绍 编辑:程序博客网 时间:2024/05/20 23:39
試著剖析一下TForm1.PageControl1Change(Sender: TObject):
先看看OnChange是什麽?它是一個改變事件(Event)。事件是一種特殊的屬性。那既然OnChange是屬性,它肯定屬於某種特殊的資料類型,這個資料類型又是什麽呢?按下F1在Delphi的Help中找到它:
property OnChange: TNotifyEvent;
也就是說,OnChange是TNotifyEvent類型的資料。再看看TNotifyEvent,發現這樣的一種類型:
type TNotifyEvent = procedure (Sender: TObject) of object
看起來好奇怪嘛,因爲TNotifyEvent後面加了一個of object關鍵字,而of object的作用在於變數只能通過物件來引用。所以現在可以準確的講:TNotifyEvent是一個方法類型
再看看(Sender: TObject),其中的Sender是一個TObject類型的參數,它告訴Delphi哪個元件接收這個事件並調用相應的處理過程。我們可以編寫一個單一的事件處理控制碼(Handle),通過Sender參數和If…then…語句或者Case語句配合來處理多個元件。發生事件的元件的值已經賦給了Sender參數,該參數的用途之一就在於:可以使用保留字Is來測試Sender,以便找到調用這個事件處理控制碼的元件的類型,例如:
procedure TForm1.xxx(Sender:TObject); begin if(sender if Tedit) then showmessage('This is a Editbox'); if(sender is Tlabel) then showmessage('This is a Label'); end;
而Sender參數的第二個用途是:結合As操作符進行類型轉換,將若干個派生于某一父類的子類強制轉換成該父類,例如:一個Form中有一個TEdit類元件和一個TMemo元件,它們實際上都派生於TCustomEdit類,如果我要爲二者的某一事件提供同樣處理,可以將二者事件控制碼都指向自定義的過程yyy:
Procedure TForm1.yyy(Sender:TObject); begin (sender as TcustomEdit).text:='This is some demo text'; end;
在過程中,As操作符將TEdit類和TMemo類均強制轉換成TCustomEdit類,再對TCustomEdit類的屬性賦值。注意這種轉換必須符合Delphi中類的層次關係哦!
通過上面的分析,不難理解william和T.J.B兩位前輩Form1.PageControl1Change(Form1.PageControl1)的方法了
小弟也是初通皮毛,謬誤肯定是有的,肯請各位指正,謝謝
- 呼叫event的sender討論
- sender,e 的意义
- sender的理解
- Sender的作用
- Sender的认识
- 关于IBAction的sender
- zabbix sender的使用
- sender
- Sender
- sender对象的使用方法笔记
- sender对象的使用方法笔记
- Self和Sender的区别
- Delphi-Sender对象的定义
- C#中sender的用法
- UDT的Sender和Receiver
- Linux的系统呼叫
- 呼叫中心的核心技术
- XMLHTTPRequest 的封装--Sender
- 工作了2个星期
- 如何保护我们的.NET程序集?
- 如何簡單的將目前這筆資料再複製一筆
- 檔案複製時如何得知已複製的檔案大小?
- try ... except 用法
- 呼叫event的sender討論
- 如何取得別支程式的輸入游標位置?
- 哈
- 引入社区基金制度.
- 短消息系统的调整
- 今天社区研讨会的一些情况
- 一个程序员的学习历程
- MainForm关闭之后保持程序运行
- 判断文件或文件夹是否存在