Información general sobre eventos (Windows Forms para .NET)
Un evento es una acción a la que puede responder, o que puede "controlar", en el código. Los eventos se pueden generar mediante una acción del usuario, como hacer clic con el mouse o presionar una tecla, 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 que puede programar. Si se produce uno de estos eventos y hay código en el controlador de eventos asociado, se invoca ese código.
Los tipos de eventos que puede generar 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 ejecuta el código del controlador de evento Click del formulario.
Nota
Muchos eventos se producen junto con otros eventos. Por ejemplo, mientras se produce el evento DoubleClick, se producen los eventos MouseDown, MouseUp y Click.
Para obtener información sobre cómo generar y usar un evento, vea Control y generación de eventos.
Delegados y sus roles
Los delegados son clases que se suelen usar en .NET para compilar mecanismos de control de eventos. Básicamente, los delegados son como punteros de función, que se suelen usar en Visual C++ y en otros lenguajes orientados a objetos. Sin embargo, a diferencia de los punteros de 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 solo contiene una referencia a una función concreta, un delegado consta de una referencia a un objeto y de referencias a uno o varios métodos dentro del objeto.
Este modelo de eventos utiliza delegados para enlazar eventos a los métodos que se usan para controlarlos. El delegado permite especificar un método de controlador para registrar otras clases para la notificación de eventos. Cuando el evento se produce, el delegado llama al método enlazado. Para obtener más información sobre cómo definir delegados, vea Control y generación de eventos.
Los delegados se pueden enlazar a un único método o a varios métodos, lo que se conoce como multidifusión. Cuando se crea un delegado para un evento, normalmente es un evento de multidifusión. Una excepción rara podría ser un evento que genera un procedimiento específico (como mostrar un cuadro de diálogo) que lógicamente no se repetiría varias veces por evento. Para obtener información sobre cómo crear un delegado de multidifusión, vea Procedimiento para combinar delegados (delegados de multidifusión).
Un delegado de multidifusión mantiene una lista de invocación 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 invocación y un método Remove para quitarlo.
Cuando la aplicación registra un evento, el control invoca al delegado de ese evento para generarlo. A su vez, el delegado llama al método enlazado. En el caso más frecuente (un delegado de multidifusión), el delegado llama a su vez a cada método enlazado en la lista de invocación, lo que proporciona una notificación de uno a varios. En esta estrategia, el control no necesita mantener una lista de objetos de destino para cada evento; el delegado controla todo el registro y la notificación.
Los delegados también permiten enlazar varios eventos al mismo método, lo que permite una notificación de varios a uno. Por ejemplo, tanto un evento de clic en botón como un evento de clic en comando de menú pueden invocar al mismo delegado que, después, llama a un único método para controlar estos eventos diferentes de la misma manera.
El mecanismo de enlace que se usa con los 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 de enlace según una condición, y asociar dinámicamente un controlador de evento a un control.
Vea también
.NET Desktop feedback