事件只是用來通知一個行爲已經發生的信息。在ObjectARX中,我們使用反應器(reactor)來處理AutoCAD的事件。而在AutoCAD .NET API中,ObjectARX反應器被換成了事件。
事件處理函數(或者叫回調函數)是用來監視和反饋程序中出現的事件。事件可以以不同的形式出現。
下面介紹代理:
代理是一個存儲方法索引的類(概念與函數指針類似)。代理對方法是類型安全的(與C中的函數指針類似)。代理有特定的形式和返回類型。代理可以封裝符合這種特定形式的任何方法。
代理的一個用途就是作爲產生事件的類的分發器。事件是.NET環境中第一級別的對象。雖然VB.NET把事件處理的許多細節給隱藏掉了,但事件總是由代理來實現的。事件代理可以多次調用(就是它們可以存儲多於1個的事件處理方法的索引)。它們保存了用於事件的一個註冊事件處理的列表。一個典型的代理有以下的形式:
Public Delegate Event (sender as Object, e as EventArgs)
第一個參數sender表示引發事件的對象。
第二個參數e是一個EventArgs參數(或者是一個派生的類),這個對象通常包含用於事件處理函數的數據。
VB.NET AddHandler語句
要使用事件處理函數,我們必須把它與事件聯繫起來。這要通過使用VB.NET AddHandler語句。AddHandler和RemoveHandler允許你在運行時連接、斷開或修改與事件聯繫的處理函數。
當我們使用VB.NET AddHandler語句時,我們要確定事件引發者的名字,並要使用AddressOf語句來確定事件處理函數,例如:
AddHandler MyClass1.AnEvent, AddressOf EHandler
前面我們說過要使用RemoveHandler語句從事件處理函數中斷開事件(移除聯繫)。語法如下所示:
RemoveHandler MyClass1.AnEvent, AddressOf EHandler