Compartir a través de


Introducción a los eventos

Un evento es una acción a la que puede responder o "controlar" en el código. Normalmente, una acción del usuario genera eventos, como hacer clic en el mouse o presionar una tecla, pero también se pueden generar mediante código de programa o por el sistema.

Las aplicaciones controladas por eventos ejecutan código en respuesta a un evento. Cada formulario y control expone un conjunto predefinido de eventos a los que puede responder. Si se genera uno de estos eventos y hay un controlador de eventos asociado, se invoca el controlador y se ejecuta el código.

Los tipos de eventos generados por un objeto varían, pero muchos tipos son comunes a la mayoría de los controles. Por ejemplo, la mayoría de los objetos tienen un Click evento que se genera cuando un usuario hace clic en él.

Nota:

Muchos eventos se producen con otros eventos. Por ejemplo, durante el transcurso del evento DoubleClick, se producen los eventos MouseDown, MouseUp, y Click.

Para obtener información general sobre cómo generar y consumir un evento, consulte Control y generación de eventos en .NET.

Delegados y su rol

Los delegados son clases que se suelen usar en .NET para crear mecanismos de control de eventos. Los delegados equivalen aproximadamente a punteros de función, que se usan normalmente en Visual C++ y otros lenguajes orientados a objetos. Sin embargo, a diferencia de los punteros de función, los delegados están orientados a objetos, son seguros en cuanto a tipos y confiables. Además, donde un puntero de función contiene solo una referencia a una función determinada, un delegado consta de una referencia a un objeto y referencias a uno o varios métodos dentro del objeto.

Este modelo de eventos usa delegados para enlazar eventos a los métodos que se usan para controlarlos. El delegado permite que otras clases se registren para la notificación de eventos especificando un método de controlador. Cuando ocurre el evento, el delegado invoca el método vinculado. Para obtener más información sobre cómo definir delegados, consulte Control y generación de eventos.

Los delegados se pueden enlazar a un único método o a varios métodos, denominados multidifusión. Al crear un delegado para un evento, normalmente se crea un evento de multidifusión. Una excepción poco frecuente podría ser un evento que da como resultado un procedimiento específico (como mostrar un cuadro de diálogo) que no se repetiría lógicamente varias veces por evento. Para obtener información sobre cómo crear un delegado de multidifusión, vea Cómo combinar delegados (delegados de multidifusión).

Un delegado de multidifusión mantiene una lista de invocación de los métodos a los cuales está vinculado. El delegado de multidifusión admite un Combine método para agregar un método a la lista de invocación y un Remove método para quitarlo.

Cuando la aplicación registra un evento, el control genera el evento invocando el delegado para ese evento. A su vez, el delegado llama al método enlazado. En el caso más común (un objeto delegado de multidifusión), el objeto delegado llama a cada método enlazado en la lista de invocación en sucesión, lo que proporciona una notificación de uno a varios. Esta estrategia significa que el control no necesita mantener una lista de objetos de destino para la notificación de eventos: el delegado controla todo el registro y la notificación.

Los delegados también permiten vincular múltiples eventos a un único método, lo que facilita una notificación de muchos a uno. Por ejemplo, un evento de clic de botón y un evento de clic de comando de menú pueden invocar el mismo delegado, que luego llama a un único método para manejar estos eventos separados de la misma manera.

El mecanismo de enlace usado con delegados es dinámico: un delegado se puede enlazar en tiempo de ejecución a cualquier método cuya firma coincida con la del controlador de eventos. Con esta característica, puede configurar o cambiar el método enlazado en función de una condición y adjuntar dinámicamente un controlador de eventos a un control.

Eventos en Windows Forms

Los eventos de Windows Forms se declaran con el EventHandler<TEventArgs> delegado para los métodos de controlador. Cada controlador de eventos proporciona dos parámetros que permiten controlar el evento correctamente. En el ejemplo siguiente se muestra un controlador de eventos para un evento de un control ButtonClick.

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

End Sub
private void button1_Click(object sender, System.EventArgs e)
{

}

El primer parámetro proporcionasender una referencia al objeto que generó el evento. El segundo parámetro, e, pasa un objeto específico del evento que se está manejando. Al hacer referencia a las propiedades del objeto (y, a veces, sus métodos), puede obtener información como la ubicación del ratón para eventos del ratón o los datos que se transfieren en eventos de arrastrar y soltar.

Normalmente, cada evento genera un controlador de eventos con un tipo de objeto de evento diferente para el segundo parámetro. Algunos controladores de eventos, como los de los eventos MouseDown y MouseUp, tienen el mismo tipo de objeto para su segundo parámetro. Para estos tipos de eventos, puede usar el mismo controlador de eventos para controlar ambos eventos.

También puede usar el mismo controlador de eventos para controlar el mismo evento para distintos controles. Por ejemplo, si tiene un grupo de RadioButton controles en un formulario, podría crear un único controlador de eventos para el Click evento de cada RadioButton. Para obtener más información, vea Cómo controlar un evento de control.