Cómo escribir el controlador de eventos en VB.NET?
events event-handling (2)
Estoy tratando de probar el manejo de eventos muy simple en VB.NET.
Hasta ahora tengo:
Public Delegate Sub TestEventDelegate()
Public Event TestEvent As TestEventDelegate
Sub MySub
Raise TestEvent
End Sub
¿Cómo escribirías un manejador de eventos para el evento anterior que acaba de mostrar un simple MessageBox
?
En VB, tenemos dos métodos para suscribir el evento de la clase 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
Escribir el método del controlador es simple: simplemente escriba un Sub
que no toma parámetros y muestra un cuadro de mensaje.
Luego debe suscribir el controlador al evento, lo cual puede hacer agregando una cláusula Handles
al método:
Sub ShowMessageBox() Handles foo.TestEvent
O mediante el uso de una declaración AddHandler
:
AddHandler foo.TestEvent, AddressOf ShowMessageBox
Tenga en cuenta que para seguir las convenciones de .NET, su delegado debe tener dos parámetros: uno de tipo Object
para especificar qué objeto generó el evento, y uno de tipo EventArgs
o una subclase, para proporcionar información adicional. Esto no es requerido por el lenguaje, pero es una convención ampliamente seguida.