Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un evento es una acción u ocurrencia —como un clic del ratón o un límite de crédito superado— que es reconocida por algún componente del programa, y para el cual puede escribir código para responder. Un controlador de eventos es el código que se escribe para responder a un evento.
En Visual Basic, hay dos aspectos en el manejo de eventos.
- Publicación de eventos: las clases declaran eventos y los generan cuando ocurre algo interesante mediante la instrucción RaiseEvent. Esto es lo que realmente invoca (llama) a los controladores de eventos.
-
Suscripción a eventos: se suscribe a eventos mediante la identificación de procedimientos como controladores para eventos específicos. Puedes hacerlo con una
Handlescláusula y unaWithEventsvariable, o con una instrucción AddHandler.
Un controlador de eventos en Visual Basic es un Sub procedimiento. Tu código no llama directamente a este, como otros Sub procedimientos. En su lugar, los publicadores de eventos invocan el procedimiento cuando se genera el evento, ya que el procedimiento está suscrito a dicho evento.
El uso de una Handles cláusula es la manera predeterminada de suscribirse a eventos en Visual Basic. Así es como los diseñadores escriben controladores de eventos al programar en el entorno de desarrollo integrado (IDE). La AddHandler instrucción es adecuada para suscribirse a eventos dinámicamente en tiempo de ejecución.
Cuando se produce el evento, Visual Basic llama automáticamente al procedimiento de controlador de eventos. Cualquier código que tenga acceso al evento puede provocar que se produzca mediante la ejecución de una instrucción RaiseEvent.
Puede asociar más de un controlador de eventos con el mismo evento. En algunos casos, puedes desasociar un controlador de un evento. Para obtener más información, vea Eventos.
Suscribirse a un evento mediante Handles y WithEvents
Asegúrese de que el evento se declara con una Event Statement.
Declare una variable de objeto en el nivel de módulo o clase mediante la
WithEventspalabra clave . LaAscláusula de esta variable debe especificar la clase que genera el evento.En la declaración del procedimiento de control
Subde eventos, agregue unaHandlescláusula que especifique laWithEventsvariable y el nombre del evento.Cuando se produce el evento, Visual Basic llama automáticamente al
Subprocedimiento. El código puede usar unaRaiseEventinstrucción para generar el evento e invocar todos los controladores suscritos.En el ejemplo siguiente se define un evento y una
WithEventsvariable que hace referencia a la clase que genera el evento. El procedimiento de controlSubde eventos usa unaHandlescláusula para especificar la clase y el evento que controla.' Example showing event handling with Handles and WithEvents Public Class EventPublisher Public Event SomethingHappened() Public Sub CauseEvent() ' Raise the event when something interesting happens RaiseEvent SomethingHappened() End Sub End Class Public Class EventSubscriber ' Declare a WithEvents variable Dim WithEvents eventObj As New EventPublisher ' Handle the event using Handles clause Public Sub ProcessHappen() Handles eventObj.SomethingHappened ' Insert code to handle somethingHappened event. Console.WriteLine("Event handled using Handles clause!") End Sub Public Sub TriggerEvent() eventObj.CauseEvent() End Sub End Class
Suscribirse a un evento mediante AddHandler
Asegúrate de que el evento se declara con una
Eventinstrucción de evento.Ejecute una instrucción AddHandler para conectar dinámicamente el procedimiento de control
Subde eventos con el evento .Cuando se produce el evento, Visual Basic llama automáticamente al
Subprocedimiento. El código puede usar unaRaiseEventinstrucción para generar el evento e invocar todos los controladores suscritos.En el ejemplo siguiente se usa la instrucción AddHandler en el constructor para asociar el
OnTimerElapsedprocedimiento como controlador de eventos para un evento de temporizador personalizado.' Example showing event handling with AddHandler Public Class Timer Public Event TimerElapsed(ByVal message As String) Public Sub Start() ' Simulate timer elapsed RaiseEvent TimerElapsed("Timer has elapsed!") End Sub End Class Public Class Application Private appTimer As New Timer() Sub New() ' Use AddHandler to dynamically associate event handler AddHandler appTimer.TimerElapsed, AddressOf OnTimerElapsed End Sub Private Sub OnTimerElapsed(ByVal message As String) ' Insert code to handle timer elapsed event Console.WriteLine($"Handling timer event: {message}") End Sub Public Sub StartTimer() appTimer.Start() End Sub End ClassPuede desasociar un controlador de eventos de un evento ejecutando la instrucción RemoveHandler.