事件處理函數(shù)(或者叫回調(diào)函數(shù))是用來監(jiān)視和反饋程序中出現(xiàn)的事件。事件可以以不同的形式出現(xiàn)。
在介紹AutoCAD .NET API中的事件之前,讓我們先來簡單地了解一下代理。
代理
代理是一個存儲方法索引的類(概念與函數(shù)指針類似)。代理對方法是類型安全的(與C中的函數(shù)指針類似)。代理有特定的形式和返回類型。代理可以封裝符合這種特定形式的任何方法。
代理的一個用途就是作為產(chǎn)生事件的類的分發(fā)器。事件是.NET環(huán)境中第一級別的對象。雖然VB.NET把事件處理的許多細(xì)節(jié)給隱藏掉了,但事件總是由代理來實(shí)現(xiàn)的。事件代理可以多次調(diào)用(就是它們可以存儲多于1個的事件處理方法的索引)。它們保存了用于事件的一個注冊事件處理的列表。一個典型的代理有以下的形式:
- Public Delegate Event (sender as Object, e as EventArgs)
第一個參數(shù)sender表示引發(fā)事件的對象。
第二個參數(shù)e是一個EventArgs參數(shù)(或者是一個派生的類),這個對象通常包含用于事件處理函數(shù)的數(shù)據(jù)。
VB.NET AddHandler語句
要使用事件處理函數(shù),我們必須把它與事件聯(lián)系起來。這要通過使用VB.NET AddHandler語句。AddHandler和RemoveHandler允許你在運(yùn)行時連接、斷開或修改與事件聯(lián)系的處理函數(shù)。
當(dāng)我們使用VB.NET AddHandler語句時,我們要確定事件引發(fā)者的名字,并要使用AddressOf語句來確定事件處理函數(shù),例如:
- AddHandler MyClass1.AnEvent, AddressOf EHandler
前面我們說過要使用RemoveHandler語句從事件處理函數(shù)中斷開事件(移除聯(lián)系)。語法如下所示:
- RemoveHandler MyClass1.AnEvent, AddressOf EHandler