Información general sobre eventos (Formularios Windows Forms)
Actualización: noviembre 2007
Un evento es una acción a la que se puede responder o que se puede "controlar" mediante código. Los eventos se pueden generar mediante una acción del usuario, por ejemplo, haciendo clic con el mouse (ratón) o presionando una tecla, mediante código del programa o mediante el sistema.
Las aplicaciones controladas por eventos ejecutan código en respuesta a los eventos. Cada formulario y cada control exponen un conjunto de eventos predefinido que se puede utilizar al programar. Si se produce uno de estos eventos y hay código en el controlador de eventos asociado, se invocará este código.
Los tipos de eventos que produce un objeto varían, pero muchos tipos son comunes a la mayoría de los controles. Por ejemplo, la mayoría de los objetos controlará un evento Click. Si un usuario hace clic en un formulario, se ejecutará el código del controlador de eventos Click del formulario.
Nota: |
---|
Muchos eventos se producen junto con otros eventos. Por ejemplo, mientras se produce el evento DoubleClick se producen también los eventos MouseDown, MouseUp y Click. |
Para obtener información sobre cómo provocar y utilizar un evento, vea Cómo: Provocar y utilizar eventos. Para obtener un ejemplo de cómo conectar los métodos y controladores de eventos, vea Cómo: Conectar métodos controlador de eventos a eventos.
Los delegados y su función
Los delegados son clases que suelen utilizarse dentro de .NET Framework para crear mecanismos de control de eventos. Equivalen aproximadamente a los punteros a función, que se suelen utilizar en Visual C++ y en otros lenguajes orientados a objetos. No obstante, a diferencia de los punteros a función, los delegados están orientados a objetos, proporcionan seguridad de tipos y son seguros. Además, mientras que un puntero de función contiene sólo una referencia a una función concreta, un delegado consta de una referencia a un objeto y hace referencia a uno o más métodos dentro del objeto.
Este modelo de eventos utiliza delegados para enlazar los eventos a los métodos utilizados para controlarlos. El delegado permite que se registren otras clases para la notificación de eventos mediante la especificación de un método controlador. Cuando se produce el evento, el delegado llama al método enlazado. Para obtener más información sobre cómo definir los delegados, vea Eventos y delegados.
Los delegados pueden enlazarse a un solo método o a múltiples métodos, lo que se conoce como multidifusión. Cuando se crea un delegado para un evento, el programador o el Diseñador de Windows Forms crea un evento de multidifusión. Una rara excepción puede ser un evento cuyo resultado sea un procedimiento específico (tal como la presentación de un cuadro de diálogo) que no se repita lógicamente varias veces por cada evento. Para obtener información sobre cómo crear un delegado de multidifusión, vea Cómo: Combinar delegados (delegados de multidifusión) (Guía de programación de C#).
Un delegado de multidifusión mantiene una lista de llamadas de los métodos a los que está enlazado. El delegado de multidifusión admite un método Combine para agregar un método a la lista de llamadas y un método Remove para quitarlo.
Cuando la aplicación registra un evento, el control produce un evento mediante una llamada al delegado del evento. El delegado, a su vez, llama al método enlazado. En el caso más habitual (un delegado de multidifusión), el delegado llama por orden a cada uno de los métodos enlazados de la lista de llamadas, lo que proporciona una notificación de uno a muchos. Esta estrategia significa que el control no necesita mantener una lista de objetos de destino para la notificación del evento: el delegado controla todo el proceso de registro y notificación.
Los delegados permiten también enlazar múltiples eventos al mismo método, lo que permite la notificación de muchos a uno. Por ejemplo, tanto un evento clic de botón como un evento clic de comando de menú pueden invocar al mismo delegado que, a continuación, llama a un solo método para controlar de la misma manera estos eventos separados.
El mecanismo de enlace que se utiliza con los delegados es dinámico: un delegado puede enlazarse en tiempo de ejecución a cualquier método cuya firma coincida con la del controlador de eventos. Esta función permite configurar o cambiar el método de enlace dependiendo de una condición y asociar dinámicamente un controlador de eventos a un control.
Vea también
Conceptos
Información general sobre controladores de eventos (Formularios Windows Forms)