繁体   English   中英

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

[英]How to write event handler in 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM