我想在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)) –