在运行时将事件与事件处理程序相关联。
语法
AddHandler event, {AddressOf eventhandler | expression }
部件
| 部件 | DESCRIPTION |
|---|---|
event |
要处理的事件的名称。 |
eventhandler |
处理事件的过程的名称。 |
expression |
处理事件的 lambda 表达式。 |
这些部分 AddressOf eventhandler 和 expression 互斥。
注解
使用 AddHandler and RemoveHandler 语句,可以在程序执行期间随时启动和停止事件处理。
新事件处理程序( eventhandler 过程或 expression lambda)的签名必须与事件的 event签名匹配。
关键字 Handles 和 AddHandler 语句都允许指定特定过程处理特定事件,但存在差异。 该 AddHandler 语句在运行时将过程连接到事件。
Handles定义过程以指定它处理特定事件时,请使用关键字。 有关详细信息,请参阅 句柄。
以后无法删除使用显式 lambda 添加的处理程序(使用 RemoveHandler)。 事实上,如果 lambda 未指定名称,则以后无法引用它。 但是,将 lambda 分配到变量并通过此变量添加处理程序允许使用此变量删除处理程序。
注释
对于自定义事件,该 AddHandler 语句调用事件的 AddHandler 访问器。 有关自定义事件的详细信息,请参阅 事件语句。
示例:
以下示例演示了如何将 AddHandler 委托用于 ConvertEventHandler 数据绑定方案。 此示例演示了一个实际用例,其中事件处理程序附加到 Format 对象以及 Parse 要转换小数值和货币字符串之间的事件 Binding 。
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将委托附加到ConvertEventHandlerFormat事件。Parse - 实现在十进制和货币字符串格式之间进行转换的事件处理程序方法。
- 自定义事件和 lambda 表达式的基本
AddHandler用法。