Eventos y controladores de eventos

Actualización: noviembre 2007

A pesar de que puede visualizar un proyecto de Visual Studio como una serie de procedimientos que se ejecutan consecutivamente, en realidad la mayoría de los programas están dirigidos por eventos, es decir, el flujo de ejecución está 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 de 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 separadas se comuniquen. Suponga, por ejemplo, que una aplicación realiza una tarea de ordenación independientemente de la aplicación principal. Si un usuario cancela la ordenación, la aplicación puede enviar un evento de cancelación que ordene la detención del proceso de ordenación.

Conceptos y términos de los eventos

Esta sección describe los términos y conceptos que se utilizan con eventos en Visual Basic.

Declarar eventos

Los eventos se declaran en clases, estructuras, módulos e interfaces mediante la palabra clave Event, como se muestra en el siguiente ejemplo:

Event AnEvent(ByVal EventNumber As Integer)

Producir eventos

Un evento es como un mensaje que anuncia que ha pasado algo importante. A la acción de difundir el mensaje se le llama producir el evento. En Visual Basic, los eventos se producen con la instrucción RaiseEvent, como en el ejemplo siguiente:

RaiseEvent AnEvent(EventNumber)

Los eventos se deben provocar dentro del ámbito de la clase, módulo o estructura donde se declaran. Por ejemplo, una clase derivada no puede producir eventos heredados de una clase base.

Remitentes de eventos

Cualquier objeto capaz de producir un evento es un remitente de eventos, y también recibe el nombre de origen de eventos. Los formularios, controles y objetos definidos por el usuario son ejemplos de remitentes de eventos.

Controladores de eventos

Los controladores de eventos son procedimientos llamados cuando se produce un evento correspondiente. Puede utilizar cualquier subrutina válida con una firma coincidente como controlador de eventos. No obstante, no puede utilizar una función como controlador de eventos, porque no puede devolver un valor al origen del evento.

Visual Basic utiliza una convención de nomenclatura estándar para controladores de eventos que combina el nombre del remitente del evento, un signo de subrayado y el nombre del evento. Por ejemplo, el evento Click de un botón denominado button1 recibiría el nombre de Sub button1_Click.

Nota:

Es recomendable utilizar esta convención de nomenclatura al definir controladores de eventos para sus propios eventos, pero no es estrictamente necesario; puede utilizar cualquier nombre de subrutina válido.

Asociar eventos a controladores de eventos

Para que un controlador de eventos se pueda utilizar, primero debe asociarse a un evento mediante la instrucción Handles o AddHandler.

La instrucción WithEvents y la cláusula Handles proporcionan una forma declarativa de especificar controladores de eventos. Los eventos provocados por un objeto declarado con WithEvents los puede controlar cualquier subrutina con una cláusula Handles que dé nombre a este evento. Aunque la cláusula Handles es la forma estándar de asociar un evento a un controlador de eventos, está limitada a asociar eventos a controladores de eventos en tiempo de compilación.

Las instrucciones AddHandler y RemoveHandler son más flexibles que la cláusula Handles. Le permiten conectar y desconectar de forma dinámica los eventos con uno o varios controladores de eventos en tiempo de ejecución, y no requieren que declare variables de objeto mediante WithEvents. Sin embargo, hay algunas restricciones en el uso de WithEvents. Para obtener más información, vea WithEvents y la cláusula Handles.

En algunos casos, como con eventos asociados a formularios o controles, Visual Basic finaliza automáticamente un controlador de eventos vacío y lo asocia con un evento. Por ejemplo, al hacer doble clic en un botón de comando en un formulario en modo de diseño, Visual Basic crea un controlador de eventos vacío y una variable WithEvents para el botón de comando, como en el código siguiente:

Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click(ByVal sender As System.Object, _
   ByVal e As System.EventArgs) Handles Button1.Click
End Sub

Vea también

Tareas

Cómo: Escribir controladores de eventos

Conceptos

AddHandler y RemoveHandler

WithEvents y la cláusula Handles

Referencia

Handles

AddHandler (Instrucción)