在運行時間將事件與事件處理程式產生關聯。
語法
AddHandler event, {AddressOf eventhandler | expression }
組件
| 部分 | 說明 |
|---|---|
event |
要處理的事件名稱。 |
eventhandler |
處理事件之程序的名稱。 |
expression |
處理事件的 Lambda 表達式。 |
和 AddressOf eventhandler 部分expression互斥。
備註
AddHandler和 RemoveHandler 語句可讓您在程式執行期間隨時啟動和停止事件處理。
新事件處理程式的簽章( eventhandler 程式或 expression Lambda)必須符合事件的 event簽章。
Handles關鍵詞和 AddHandler 語句都可讓您指定特定程序處理特定事件,但有差異。 語句會將 AddHandler 程式連接到運行時間的事件。
Handles定義程式以指定它處理特定事件時,請使用 關鍵詞。 如需詳細資訊,請參閱 句柄。
稍後無法移除以明確 Lambda 新增的處理程式(使用 RemoveHandler)。 事實上,如果 Lambda 未指定名稱,則稍後無法參考它。 但是,將 Lambda 指派給變數,並透過這個變數新增處理程式可允許使用此變數移除處理程式。
備註
針對自定義事件,語句會 AddHandler 叫用事件的 存取 AddHandler 子。 如需自定義事件的詳細資訊,請參閱 Event Statement。
範例
下列範例示範如何搭配委派來ConvertEventHandler進行AddHandler資料繫結案例。 此範例顯示一個實際使用案例,其中事件處理常式會附加Format至物件的Binding事件,Parse以在十進位值和貨幣字串之間進行轉換。
Public Class DataBindingExample
Private textBox1 As TextBox
Private ds As DataSet
Public Sub New()
textBox1 = New TextBox()
ds = New DataSet()
SetupSampleData()
BindControlWithAddHandler()
End Sub
Private Sub SetupSampleData()
Dim table As New DataTable("Orders")
table.Columns.Add("OrderAmount", GetType(Decimal))
table.Rows.Add(123.45D)
table.Rows.Add(67.89D)
ds.Tables.Add(table)
End Sub
Private Sub BindControlWithAddHandler()
Dim binding As New Binding("Text", ds, "Orders.OrderAmount")
' Use AddHandler to associate ConvertEventHandler delegates
AddHandler binding.Format, AddressOf DecimalToCurrency
AddHandler binding.Parse, AddressOf CurrencyToDecimal
textBox1.DataBindings.Add(binding)
End Sub
Private Sub DecimalToCurrency(ByVal sender As Object, ByVal e As ConvertEventArgs)
If e.DesiredType IsNot GetType(String) Then
Return
End If
e.Value = CDec(e.Value).ToString("c")
End Sub
Private Sub CurrencyToDecimal(ByVal sender As Object, ByVal e As ConvertEventArgs)
If e.DesiredType IsNot GetType(Decimal) Then
Return
End If
e.Value = Convert.ToDecimal(e.Value.ToString())
End Sub
End Class
' Simple example for basic AddHandler usage
Sub TestBasicEvents()
Dim Obj As New Class1
AddHandler Obj.Ev_Event, AddressOf EventHandler
Obj.CauseSomeEvent()
RemoveHandler Obj.Ev_Event, AddressOf EventHandler
Obj.CauseSomeEvent()
' Lambda expression example
AddHandler Obj.Ev_Event, Sub ()
MsgBox("Lambda caught event.")
End Sub
Obj.CauseSomeEvent()
End Sub
Sub EventHandler()
MsgBox("EventHandler caught event.")
End Sub
Public Class Class1
Public Event Ev_Event()
Sub CauseSomeEvent()
RaiseEvent Ev_Event()
End Sub
End Class
此範例顯示:
- 建立
Binding資料繫結的物件。 - 用於
AddHandler將代表附加到ConvertEventHandler和FormatParse事件。 - 實作在十進位和貨幣字串格式之間轉換的事件處理常式方法。
-
AddHandler自訂事件和 lambda 運算式的基本用法。