如何在VB.NET中编写事件处理程序?

如何在VB.NET中编写事件处理程序?,.net,vb.net,events,event-handling,visual-studio-2005,.net,Vb.net,Events,Event Handling,Visual Studio 2005,我试图在VB.NET中测试非常简单的事件处理 到目前为止,我已经: Public Delegate Sub TestEventDelegate() Public Event TestEvent As TestEventDelegate Sub MySub Raise TestEvent End Sub 如何为刚刚显示简单的消息框的上述事件编写事件处理程序 在VB中,我们有两种方法订阅Publisher类的事件 'Delegate Public Delegate Sub TestEve

我试图在VB.NET中测试非常简单的事件处理

到目前为止,我已经:

Public Delegate Sub TestEventDelegate()
Public Event TestEvent As TestEventDelegate

Sub MySub
    Raise TestEvent
End Sub

如何为刚刚显示简单的
消息框的上述事件编写事件处理程序

在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

在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

编写handler方法很简单-只需编写一个
Sub
,它不接受任何参数并显示一个消息框

然后,您需要为事件订阅处理程序,您可以在方法中添加子句:

Sub ShowMessageBox() Handles foo.TestEvent
或者通过使用语句:

AddHandler foo.TestEvent, AddressOf ShowMessageBox

请注意,要遵循.NET约定,您的委托应该有两个参数—一个是类型
Object
,用于指定引发事件的对象;另一个是类型
EventArgs
或子类,用于提供任何额外信息。这不是语言所要求的,但它是一种广泛遵循的约定。

编写处理程序方法很简单-只需编写一个不带参数并显示消息框的
Sub

然后,您需要为事件订阅处理程序,您可以在方法中添加子句:

Sub ShowMessageBox() Handles foo.TestEvent
或者通过使用语句:

AddHandler foo.TestEvent, AddressOf ShowMessageBox

请注意,要遵循.NET约定,您的委托应该有两个参数—一个是类型
Object
,用于指定引发事件的对象;另一个是类型
EventArgs
或子类,用于提供任何额外信息。这不是语言所要求的,但它是一个广泛遵循的惯例。

为什么这些说明中不包括附件部分:?在某些情况下是否存在隐含的附件?@PaulLassiter:该页面是关于引发一个事件的,可以说是“服务器”端。附加事件处理程序是“客户端”端。仅供参考,更新后的文件确实涵盖了Paul在“事件处理程序”部分的代码示例中提到的内容:
AddHandler c.ThresholdReach,AddressOf c_ThresholdReach
,用于VB。为什么这些说明中不包括附件部分:?在某些情况下是否存在隐含的附件?@PaulLassiter:该页面是关于引发一个事件的,可以说是“服务器”端。附加事件处理程序是“客户端”端。仅供参考,更新后的文件确实涵盖了Paul在“事件处理程序”部分的代码示例中提到的内容:
AddHandler c.ThresholdReach,AddressOf c_ThresholdReach
,用于VB。为什么这些说明中不包括附件部分:?在某些情况下是否存在隐含附件?为什么这些说明中不包括附件部分:?在某些情况下是否存在隐性依恋?