Mi colección Crear controladores de eventos en formularios Windows Forms Crear controladores de eventos en formularios Windows Forms Visual Studio 2010 Un controlador de eventos es un procedimiento del código que determina qué acciones se ejecutan cuando se produce un evento, como cuando un usuario hace clic en un botón o una cola de mensajes recibe otro mensaje. Cuando se produce un evento, se ejecuta el controlador o controladores de eventos que reciben dicho evento. Los eventos pueden asignarse a múltiples controladores, y los métodos que controlan determinados eventos pueden modificarse de manera dinámica. También puede utilizar el Diseñador de Windows Forms para crear los controladores de eventos. Para obtener más información, vea Diseñador de Windows Forms y Diseñador de Windows Forms y Diseñador de Windows Forms y Diseñador de Windows Forms y Diseñador de Windows Forms.. En esta sección Información general sobre eventos (Formularios Windows Forms) Explica el modelo de eventos y la función de los delegados. Información general sobre controladores de eventos (Formularios Windows Forms) Describe cómo controlar eventos. Cómo: Crear controladores de eventos en tiempo de ejecución para formularios Windows Forms Proporciona instrucciones para responder dinámicamente a eventos del sistema o del usuario. Cómo: Conectar varios eventos con un único controlador de eventos en formularios Windows Forms Proporciona instrucciones para asignar la misma funcionalidad a múltiples controles por medio de eventos. http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección Orden de eventos en los formularios Windows Forms Describe el orden en que se producen los eventos en los controles de formularios Windows Forms. Topic Location Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms Programación con formularios Windows Forms Cómo: Crear controladores de eventos con el diseñador Programación con formularios Windows Forms Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms Programación con formularios Windows Forms Cómo: Crear controladores de eventos con el diseñador Programación con formularios Windows Forms Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms Programación con formularios Windows Forms Cómo: Crear controladores de eventos con el diseñador Programación con formularios Windows Forms Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms dv_ManCli Cómo: Crear controladores de eventos con el diseñador dv_ManCli Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms dv_ManCli Cómo: Crear controladores de eventos con el diseñador dv_ManCli Secciones relacionadas Controlar y provocar eventos Proporciona vínculos a temas sobre el control y provocación de eventos en .NET Framework. Solucionar problemas de controladores de eventos heredados en Visual Basic Enumera problemas comunes que aparecen con controladores de eventos en componentes heredados. Eventos y delegados Proporciona información general sobre el modelo de eventos y describe los delegados de .NET Framework. Topic Location http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección Ejemplo de eventos Aplicaciones de ejemplo de C# Ejemplo de eventos Aplicaciones de ejemplo de C# © 2016 Microsoft Información general sobre eventos (Formularios Windows Forms) Visual Studio 2010 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 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 compilar 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. http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colecció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) Otros recursos Crear controladores de eventos en formularios Windows Forms © 2016 Microsoft Información general sobre controladores de eventos (Formularios Windows Forms) Visual Studio 2010 Un controlador de eventos es un método enlazado a un evento. Cuando se produce el evento, se ejecuta el código del controlador de eventos. Cada controlador de eventos proporciona dos parámetros que permiten controlar correctamente el evento. En el siguiente ejemplo se muestra un controlador de eventos para el evento Click del control Button. C# private void button1_Click(object sender, System.EventArgs e) { http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección } J# private void button1_Click(System.Object sender, System.EventArgs e) { } C++ private: void button1_Click(System::Object ^ sender, System::EventArgs ^ e) { } El primer parámetro, sender, proporciona una referencia al objeto que provocó el evento. El segundo parámetro, e en el ejemplo anterior, pasa un objeto específico del evento que se está controlando. Al hacer referencia a las propiedades del objeto (y, a veces, a sus métodos), puede obtener información tal como la posición del mouse para los eventos del mouse o los datos que se están transfiriendo en los eventos de arrastrar y colocar. Habitualmente, cada evento produce un controlador de eventos con un tipo de objeto de evento diferente para el segundo parámetro. Algunos controladores de evento, tales como los de los eventos MouseDown y MouseUp, tienen el mismo tipo de objeto para el segundo parámetro. Para estos tipos de eventos, se puede utilizar el mismo controlador de eventos para controlar ambos eventos. También puede utilizar el mismo controlador de eventos para controlar el mismo evento de diferentes controles. Por ejemplo, si tiene un grupo de controles RadioButton en un formulario, puede crear un único controlador de eventos para el evento Click y hacer que el evento Click de cada control se enlace a ese controlador de eventos único. Para obtener más información, vea Cómo: Conectar varios eventos con un único controlador de eventos en formularios Windows Forms. Vea también Conceptos Información general sobre eventos (Formularios Windows Forms) Otros recursos Crear controladores de eventos en formularios Windows Forms © 2016 Microsoft Cómo: Crear controladores de eventos en tiempo de ejecución para formularios Windows Forms http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección Visual Studio 2010 Además de crear eventos con el Diseñador de Windows Forms, también puede crear un controlador de eventos en tiempo de ejecución. Esta acción le permite conectar controladores de eventos basándose en las condiciones del código en tiempo de ejecución en lugar de conectarlos cuando el programa se inicia. Para crear un controlador de eventos en tiempo de ejecución 1. Abra en el Editor de código el formulario al que desea agregar un controlador de eventos. 2. Agregue un método al formulario con la firma de método del evento que desee controlar. Por ejemplo, si desea controlar el evento Click de un control Button, deberá crear un método como el siguiente: VB Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) ' Add event handler code here. End Sub C# private void button1_Click(object sender, System.EventArgs e) { // Add event handler code here. } J# private void button1_Click(System.Object sender, System.EventArgs e) { // Add event handler code here. } C++ private: void button1_Click(System::Object ^ sender, System::EventArgs ^ e) { // Add event handler code here. } 3. Agregue al controlador de eventos el código adecuado para la aplicación. 4. Determine el formulario o control para el que desea crear un controlador de eventos. 5. En un método de la clase del formulario, agregue código que especifique el controlador de eventos que va a controlar el evento. Por ejemplo, en el código siguiente se especifica que el controlador de eventos button1_Click controla el evento Click de un control Button: http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección VB AddHandler Button1.Click, AddressOf Button1_Click C# button1.Click += new EventHandler(button1_Click); J# button1.add_Click(new EventHandler(button1_Click)); C++ button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); El método AddHandler mostrado anteriormente en el código de Visual Basic establece un controlador de evento clic para el botón. Vea también Tareas Solucionar problemas de controladores de eventos heredados en Visual Basic Conceptos Información general sobre controladores de eventos (Formularios Windows Forms) Otros recursos Crear controladores de eventos en formularios Windows Forms © 2016 Microsoft Cómo: Conectar varios eventos con un único controlador de eventos en formularios Windows Forms Visual Studio 2010 En el diseño de la aplicación, quizá encuentre necesario disponer de un único controlador de eventos que se utilice para múltiples eventos o bien que múltiples eventos realicen el mismo procedimiento. Por ejemplo, se suele ahorrar mucho tiempo si un comando de menú activa el mismo evento que un botón del formulario, en el caso de que ambos ofrezcan http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección la misma funcionalidad. Para ello se puede utilizar la vista Eventos de la ventana Propiedades de C#, o la palabra clave Handles y las listas desplegables Nombre de clase y Nombre de método en el Editor de código de Visual Basic. Para conectar varios eventos a un único controlador de eventos en Visual Basic 1. Haga clic con el botón secundario del mouse en el formulario y elija Ver código. 2. En el cuadro de diálogo Nombre de clase, seleccione uno de los controles al que desea agregar un controlador de eventos. 3. En el cuadro de diálogo Nombre de método, seleccione uno de los eventos al que desea agregar un controlador de eventos. 4. El Editor de código inserta el controlador de eventos apropiado y sitúa el punto de inserción dentro del método. En el siguiente ejemplo, se trata del evento Click para el control Button. VB Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Add event-handler code here. End Sub 5. Agregue los otros eventos que desea controlar en la cláusula Handles . VB Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click ' Add event-handler code here. End Sub 6. Agregue el código apropiado al controlador de eventos. Para conectar varios eventos a un único controlador de eventos en C# 1. Seleccione el control al que desea conectar un controlador de eventos. 2. En la ventana Propiedades, haga clic en el botón Eventos ( ). 3. Haga clic en el nombre del evento que desea controlar. 4. En la sección de valor, junto al nombre del evento, haga clic en el botón de lista desplegable para mostrar una lista de controladores de eventos existentes que coincidan con la firma del método del evento que desea controlar. 5. Seleccione en la lista el controlador de eventos adecuado. Se agregará código al formulario para enlazar el evento al controlador de eventos existente. Vea también Conceptos Información general sobre controladores de eventos (Formularios Windows Forms) http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección Otros recursos Crear controladores de eventos en formularios Windows Forms © 2016 Microsoft Orden de eventos en los formularios Windows Forms Visual Studio 2010 El orden en que se producen los eventos en las aplicaciones de Windows Forms resulta especialmente interesante para los desarrolladores preocupados por controlar uno a uno cada uno de estos eventos. Cuando una situación exige un control minucioso de los eventos, como cuando se vuelven a dibujar partes del formulario, es necesario ser consciente del orden exacto en el que se desencadenarán los eventos en tiempo de ejecución. En este tema se proporcionan algunos detalles sobre el orden de los eventos durante varias fases importantes del uso de las aplicaciones y los controles. Para obtener detalles concretos sobre el orden de eventos de entrada del mouse, vea Eventos del mouse (ratón) en formularios Windows Forms. Para obtener información general sobre los eventos de los formularios Windows Forms, vea Información general sobre eventos (Formularios Windows Forms). Para obtener información detallada sobre la composición de los controladores de eventos, vea Información general sobre controladores de eventos (Formularios Windows Forms). Eventos de inicio y cierre de la aplicación Las clases Form y Control exponen un conjunto de eventos relacionados con el inicio y cierre de la aplicación. Cuando una aplicación de Windows Forms se inicia, los eventos de inicio del formulario principal se provocan en el orden siguiente: Control.HandleCreated Control.BindingContextChanged Form.Load Control.VisibleChanged Form.Activated Form.Shown Cuando una aplicación se cierra, los eventos de cierre del formulario principal se producen en el orden siguiente: Form.Closing Form.FormClosing Form.Closed Form.FormClosed Form.Deactivate http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección El evento ApplicationExit de la clase Application se provoca después de los eventos de cierre del formulario principal. Nota Visual Basic 2005 incluye eventos de aplicación adicionales, como WindowsFormsApplicationBase.Startup y WindowsFormsApplicationBase.Shutdown. Para obtener más información, vea Cómo: Controlar eventos de aplicaciones (Visual Basic) y Cómo: Controlar eventos de aplicaciones (Visual Basic) y Cómo: Controlar eventos de aplicaciones (Visual Basic). Eventos Focus y Validation Al cambiar el foco mediante el teclado (TAB, MAYÚS+TAB, etc.), llamando a los métodos Select o SelectNextControl; o bien, estableciendo el valor de la propiedad ActiveControl en el formulario actual, los eventos de foco de la clase Control se producen en el siguiente orden: Enter GotFocus Leave Validating Validated LostFocus Cuando cambia el foco utilizando el mouse o llamando el método Focus, los eventos del foco de la clase Control tienen lugar en el siguiente orden: Enter GotFocus LostFocus Leave Validating Validated Vea también Otros recursos Crear controladores de eventos en formularios Windows Forms © 2016 Microsoft http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección Cómo: Crear controladores de eventos con el diseñador Visual Studio 2010 En casi todas las aplicaciones, es esencial responder a eventos de usuario o del sistema. Se pueden crear controladores de eventos mediante la ventana Propiedades, tal como se trata en el procedimiento siguiente. Para obtener más información sobre cómo crear los controladores de eventos predeterminados, vea Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms. Nota Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de configuración. Para crear un controlador de eventos en el Diseñador de Windows Forms 1. Haga clic en el formulario o control para el que desea crear un controlador de eventos. 2. En la ventana Propiedades, haga clic en el botón Eventos ( ). 3. En la lista de eventos disponibles, haga clic en el evento para el que desea crear un controlador de eventos. 4. En el cuadro que se encuentra a la derecha del nombre de evento, escriba el nombre del controlador y presione ENTRAR. Nota Asigne al controlador de eventos un nombre relacionado con la funcionalidad del evento; por ejemplo, para el evento Click puede escribir StartProcess como controlador de eventos. Aparecerá el Editor de código con el código del formulario y se generará en el código un método de control de eventos similar al siguiente: VB Private Sub StartProcess(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.Click ' Add event handler code here. End Sub C# private void StartProcess(object sender, System.EventArgs e) { // Add event handler code here. } http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección J# private void StartProcess(System.Object sender, System.EventArgs e) { // Add Event Handler Code Here } C++ private: void StartProcess(System::Object ^ sender, System::EventArgs ^ e) { // Add event handler code here. } 5. Agregue el código correspondiente al controlador de eventos. Vea también Tareas Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms Conceptos Información general sobre controladores de eventos (Formularios Windows Forms) Otros recursos Crear controladores de eventos en formularios Windows Forms © 2016 Microsoft Cómo: Crear controladores de eventos predeterminados en el Diseñador de Windows Forms Visual Studio 2010 Dentro del Diseñador de Windows Forms, al hacer doble clic en la superficie de diseño (ya sea en el formulario o en un control) se crea un controlador de eventos para la acción predeterminada del elemento. Nota Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección configuración. Para crear el controlador de eventos para una acción predeterminada 1. Haga doble clic en el elemento del Diseñador de Windows Forms para el que desea crear un controlador. Se abrirá el Editor de código y el puntero del mouse se situará dentro del controlador de eventos predeterminado recién creado. 2. Agregue el código correspondiente al controlador de eventos. Al finalizar, el código podría tener el siguiente aspecto: VB Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 'Add event-handler code here End Sub C# private void button1_Click(object sender, System.EventArgs e) { // Add event-handler code here. } C++ private: void button1_Click(System::Object ^ sender, System::EventArgs ^ e) { // Add event-handler code here. } El código anterior es el controlador de eventos predeterminado de un control Button. Vea también Tareas Cómo: Crear controladores de eventos con el diseñador Cómo: Crear controladores de eventos en tiempo de ejecución para formularios Windows Forms Solucionar problemas de controladores de eventos heredados en Visual Basic Conceptos Información general sobre controladores de eventos (Formularios Windows Forms) Otros recursos Crear controladores de eventos en formularios Windows Forms http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.] Mi colección © 2016 Microsoft http://pabprod.blob.core.windows.net/books/f6201e18-25d3-43ac-ad1e-04db424ed76e.html[06/02/2016 12:34:41 p. m.]