- Artículo
- Tiempo de lectura: 7 minutos
Aunque un proyecto se puede visualizar como una serie de procedimientos que se ejecutan en secuencia, en realidad, la mayoría de los programas se basan en eventos, lo que significa que el flujo de ejecución viene determinado por elementos externos denominados eventos.
Un evento es una señal que comunica a una aplicación que ha sucedido algo importante. Por ejemplo, cuando un usuario hace clic en un control en un formulario, el formulario puede provocar un evento Click
y llamar a un procedimiento que controla el evento. Los eventos también permiten que las tareas independientes se comuniquen. Por ejemplo, supongamos que la aplicación realiza una tarea de ordenación de manera independiente a la aplicación principal. Si un usuario cancela la ordenación, la aplicación puede enviar un evento de cancelación que indica al proceso de ordenación que se detenga.
Conceptos y términos de eventos
En esta sección se describen los términos y conceptos que se utilizan con eventos en VisualBasic.
Declarar eventos
Puede declarar eventos dentro de clases, estructuras, módulos e interfaces con la palabra clave Event
, como en el ejemplo siguiente:
Event AnEvent(ByVal EventNumber As Integer)
Provocar eventos
Un evento es como un mensaje que anuncia que ha sucedido algo importante. La acción de difundir el mensaje se denomina generar el evento. En VisualBasic, los eventos se generan con la instrucción RaiseEvent
, como en el siguiente ejemplo:
RaiseEvent AnEvent(EventNumber)
Los eventos deben generarse dentro del ámbito de la clase, del módulo o de la estructura donde se declaran. Por ejemplo, una clase derivada no puede generar eventos heredados de una clase base.
Remitentes de eventos
Cualquier objeto capaz de generar un evento es un remitente del evento, lo que también se conoce como origen del evento. Los formularios, controles y objetos definidos por el usuario son ejemplos de remitentes de eventos.
Controladores de eventos
Los controladores de eventos son procedimientos que se invocan cuando se produce un evento correspondiente. Puede utilizar cualquier subrutina válida con una firma coincidente como un controlador de eventos. Sin embargo, no se puede utilizar una función como un controlador de eventos, porque no devolverá un valor al origen del evento.
VisualBasic utiliza una convención de nomenclatura estándar en los controladores de eventos que combina el nombre del remitente del evento, un guion bajo y el nombre del evento. Por ejemplo, el evento Click
de un botón con nombre button1
se denominaría Sub button1_Click
.
Nota
Se recomienda utilizar esta convención de nomenclatura al definir controladores de eventos para sus propios eventos, pero no es necesario; puede utilizar cualquier nombre de subrutina válido.
Asociación de eventos con controladores de eventos
Antes de poder utilizar un controlador de eventos, primero debe asociarlo con un evento mediante la utilización de la instrucción Handles
o AddHandler
.
WithEvents y la cláusula Handles
La instrucción WithEvents
y la cláusula Handles
proporcionan una forma declarativa de especificar controladores de eventos. Un evento generado por un objeto declarado con la palabra clave WithEvents
puede controlarse mediante cualquier procedimiento con una instrucción Handles
para ese evento, tal como se muestra en el ejemplo siguiente:
' Declare a WithEvents variable.Dim WithEvents EClass As New EventClass' Call the method that raises the object's events.Sub TestEvents() EClass.RaiseEvents()End Sub' Declare an event handler that handles multiple events.Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent MsgBox("Received Event.")End SubClass EventClass Public Event XEvent() Public Event YEvent() ' RaiseEvents raises both events. Sub RaiseEvents() RaiseEvent XEvent() RaiseEvent YEvent() End SubEnd Class
La instrucción WithEvents
y la cláusula Handles
suelen ser la mejor opción para controladores de eventos, porque la sintaxis declarativa que utilizan hace que el control de eventos sea más fácil de codificar, leer y depurar. Sin embargo, tenga en cuenta las siguientes limitaciones en el uso de variables WithEvents
:
No puede usar una variable
WithEvents
como una variable de objeto. Es decir, no puede declararla comoObject
: debe especificar el nombre de clase al declarar la variable.(Video) Events in Visual BasicComo los eventos compartidos no están enlazados a las instancias de clase,
WithEvents
no se puede usar para controlar los eventos compartidos mediante declaración. De forma similar, no puede usarWithEvents
oHandles
para controlar eventos desdeStructure
. En ambos casos, puede usar la instrucciónAddHandler
para controlar dichos eventos.No puede crear matrices de las variables
WithEvents
.
Las variables WithEvents
permiten que un único controlador de eventos controle uno o varios tipos de eventos, o bien que uno o varios controladores de eventos controlen el mismo tipo de eventos.
Aunque la cláusula Handles
es la forma estándar de asociar un evento con un controlador de eventos, tiene la limitación de que solo puede asociar eventos con controladores de eventos en tiempo de compilación.
En algunos casos, como con eventos asociados con formularios o controles, VisualBasic conecta automáticamente un controlador de eventos vacío y lo asocia con un evento. Por ejemplo, si hace doble clic en un botón de comando de un formulario en modo de diseño, VisualBasic crea un controlador de eventos vacío y una variable WithEvents
para el botón de comando, como en el siguiente código:
Friend WithEvents Button1 As System.Windows.Forms.ButtonProtected Sub Button1_Click() Handles Button1.ClickEnd Sub
AddHandler y RemoveHandler
La instrucción AddHandler
es similar a la cláusula Handles
por el hecho de que ambas permiten especificar un controlador de eventos. Sin embargo, AddHandler
, que se utiliza con RemoveHandler
, aporta más flexibilidad que la cláusula Handles
, ya que permite agregar, eliminar y cambiar de forma dinámica el controlador de eventos asociado con un evento. Si desea controlar eventos compartidos o eventos de una estructura, debe utilizar AddHandler
.
AddHandler
adopta dos argumentos: el nombre de un evento de un remitente de eventos como un control y una expresión que evalúa a un delegado. No es necesario especificar explícitamente la clase delegada al utilizar AddHandler
, puesto que la instrucción AddressOf
siempre devuelve una referencia al delegado. En el ejemplo siguiente se asocia un controlador de eventos a un evento generado por un objeto:
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler
, que desconecta un evento de un controlador de eventos, utiliza la misma sintaxis que AddHandler
. Por ejemplo:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
En el ejemplo siguiente, un controlador de eventos está asociado a un evento, y se genera el evento. El controlador de eventos detecta el evento y muestra un mensaje.
A continuación, se quita el primer controlador de eventos y se asocia otro diferente al evento. Cuando se vuelve a generar el evento, se muestra un mensaje diferente.
Por último, se quita el segundo controlador de eventos, y el evento se genera por tercera vez. Dado que ya no hay ningún controlador de eventos asociado al evento, no se realiza ninguna acción.
Module Module1 Sub Main() Dim c1 As New Class1 ' Associate an event handler with an event. AddHandler c1.AnEvent, AddressOf EventHandler1 ' Call a method to raise the event. c1.CauseTheEvent() ' Stop handling the event. RemoveHandler c1.AnEvent, AddressOf EventHandler1 ' Now associate a different event handler with the event. AddHandler c1.AnEvent, AddressOf EventHandler2 ' Call a method to raise the event. c1.CauseTheEvent() ' Stop handling the event. RemoveHandler c1.AnEvent, AddressOf EventHandler2 ' This event will not be handled. c1.CauseTheEvent() End Sub Sub EventHandler1() ' Handle the event. MsgBox("EventHandler1 caught event.") End Sub Sub EventHandler2() ' Handle the event. MsgBox("EventHandler2 caught event.") End Sub Public Class Class1 ' Declare an event. Public Event AnEvent() Sub CauseTheEvent() ' Raise an event. RaiseEvent AnEvent() End Sub End ClassEnd Module
Control de eventos heredados de una clase base
Clases derivadas: clases que heredan características de una clase base, que pueden controlar eventos generados por su clase base con la instrucción Handles MyBase
.
Para controlar eventos de una clase base
Declare un controlador de eventos en la clase derivada; para ello, agregue una instrucción
Handles MyBase.
eventname a la línea de declaración del procedimiento del controlador de eventos, donde eventname es el nombre del evento de la clase base que se va a controlar. Por ejemplo:Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here.End ClassPublic Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End SubEnd Class
Title | Descripción |
---|---|
Tutorial: Declarar y generar eventos | Proporciona una descripción detallada de cómo declarar y generar eventos para una clase. |
Tutorial: Controlar eventos | Muestra cómo escribir un procedimiento de controlador de eventos. |
Procedimiento para declarar eventos personalizados para evitar bloqueos | Muestra cómo definir un evento personalizado que permite invocar a sus controladores de eventos de forma asincrónica. |
Cómo: Declarar eventos personalizados para conservar memoria | Muestra cómo definir un evento personalizado que utiliza la memoria solo cuando se controla el evento. |
Solucionar problemas de controladores de eventos heredados en Visual Basic | Enumera los problemas habituales que se producen con los controladores de eventos en componentes heredados. |
Eventos | Proporciona una descripción general del modelo de eventos de .NET Framework. |
Crear controladores de eventos en Windows Forms | Describe cómo trabajar con eventos asociados a objetos de Windows Forms. |
Delegados | Proporciona información general sobre delegados en Visual Basic. |
FAQs
What types of events are there in Visual Basic? ›
Events are basically a user action like key press, clicks, mouse movements, etc., or some occurrence like system generated notifications. Applications need to respond to events when they occur. Clicking on a button, or entering some text in a text box, or clicking on a menu item, all are examples of events.
What are event handlers and events in Visual Basic? ›An event is an action or occurrence — such as a mouse click or a credit limit exceeded — that is recognized by some program component, and for which you can write code to respond. An event handler is the code you write to respond to an event. An event handler in Visual Basic is a Sub procedure.
What is the difference between events and methods in VB? ›Methods cause an object to do something. Events are what happens when an object does something. Every object, such as a form or control, has a set of properties that describe it.
How do you declare an event in VB? ›To declare an event for the Widget class
You can declare event arguments just as you do arguments of procedures, with the following exceptions: Events cannot have Optional or ParamArray arguments, and events do not have return values.
What are the classifications of event types? Event types can be separated into corporate, private, or charity. Corporate events focus on businesses and customers, whereas private events are more recreational and charity events are for philanthropy.
What are visual events? ›-Visual events denote the complex interactions that take place between the viewer and the viewed.
What is event and event handler? ›In programming, an event handler is a callback routine that operates asynchronously once an event takes place. It dictates the action that follows the event. The programmer writes a code for this action to take place. An event is an action that takes place when a user interacts with a program.
How many events are there in VB? ›The events in a Visual Basic.Net program are of two types: user generated events and system generated events. The user-generated events occur when the user actions key press, clicks, mouse movements, etc. are happening. System generated events are the notifications in the computer.