我想在VB.NET中测试非常简单的事件处理。如何在VB.NET中编写事件处理程序?
到目前为止,我有:
Public Delegate Sub TestEventDelegate()
Public Event TestEvent As TestEventDelegate
Sub MySub
Raise TestEvent
End Sub
你会如何写,只是显示一个简单的MessageBox
上述事件的事件处理程序?
我想在VB.NET中测试非常简单的事件处理。如何在VB.NET中编写事件处理程序?
到目前为止,我有:
Public Delegate Sub TestEventDelegate()
Public Event TestEvent As TestEventDelegate
Sub MySub
Raise TestEvent
End Sub
你会如何写,只是显示一个简单的MessageBox
上述事件的事件处理程序?
写处理程序的方法是简单的 - 只写一个Sub
其中不带参数,显示一个消息框。
然后您需要处理程序订阅的事件,你可以不添加Handles
子句的方法:
Sub ShowMessageBox() Handles foo.TestEvent
,或者通过使用AddHandler
声明:
AddHandler foo.TestEvent, AddressOf ShowMessageBox
注为了遵循.NET约定,您的委托应该有两个参数 - Object
类型之一来指定哪个对象引发事件,以及一个类型为EventArgs
或一个子类,以提供任何额外的信息。这不是要求的语言,但它是一个广泛遵循的惯例。
在VB中,我们有两种方法来订阅Publisher
类的事件。
'Delegate
Public Delegate Sub TestEventDelegate()
'Event publisher class that publishes and raises an event
Public Class EventPublisher
Private _num As Integer
Public Event NumberChanged As TestEventDelegate
Public Property Number As Integer
Get
Return _num
End Get
Set(value As Integer)
_num = value
RaiseEvent NumberChanged()
End Set
End Property
End Class
'Event subscriber class
Public Class EventSubscriber
'instance of EventPublisher class
Private WithEvents myObject As New EventPublisher
'Handler of myObject.NumberChanged event
Public Sub ShowMessage() Handles myObject.NumberChanged
Console.WriteLine("Value has been changed")
End Sub
Shared Sub Main()
Dim es As New EventSubscriber
es.myObject.Number = 10
es.myObject.Number = 20
'Handle the events dynamically using AddHandler
Dim ep1 As New EventPublisher
ep1.Number = 101
'Attach an event to the handler
AddHandler ep1.NumberChanged, AddressOf TestIt
ep1.Number = 102
End Sub
Shared Sub TestIt()
Console.WriteLine("Number is modified")
End Sub
End Class
为什么附件不包含在这些说明中:[link](http://msdn.microsoft.com/en-US/library/2ccyd347(v = vs80))?在某些情况下是否存在隐式附件? –
为什么这些说明中不包含附件部分:http://msdn.microsoft.com/en-US/library/wkzf914z(v=vs.80)?在某些情况下是否存在隐式附件? –
@PaulLassiter:该页面是关于*引发*事件 - “服务器”方面,因为它是。附加一个事件处理程序是“客户端”。 –
对不起,我的意思是[链接](http://msdn.microsoft.com/en-US/library/2ccyd347(v = vs.80)) –