Cómo: Consumir eventos en una aplicación de formularios Windows Forms

Un escenario común en las aplicaciones de Windows Forms es mostrar un formulario con controles y, a continuación, realizar una acción concreta basada en el control en el que el usuario hace clic. Por ejemplo, un control Button provoca un evento cuando el usuario hace clic en él en el formulario. Controlando el evento, la aplicación puede ejecutar la lógica de aplicación adecuada para ese clic del botón.

Para obtener más información sobre formularios Windows Forms, vea Introducción a los formularios Windows Forms.

Para controlar un evento de clic de un botón en un Windows Form

  1. Cree un Windows Form que tenga un control Button.

    Private WithEvents myButton As Button
    
    private Button button;
    
    private:
        Button^ button;
    
  2. Defina un controlador de eventos que coincida con la firma de delegado del evento Click. El evento Click utiliza la clase EventHandler para el tipo de delegado y la clase EventArgs para los datos del evento.

    Private Sub Button_Click(sender As Object, e As EventArgs)
        '...
    End Sub
    
    private void Button_Click(object sender, EventArgs e)
    {
        //...
    }
    
    private:
        void Button_Click(Object^ sender, EventArgs^ e)
        {
            //...
        }
    
  3. Agregue el método de control de eventos al evento Click de Button.

    AddHandler myButton.Click, AddressOf Me.Button_Click
    
    button.Click += new EventHandler(this.Button_Click);
    
    button->Click += gcnew EventHandler(this, &SnippetForm::Button_Click);
    

    Nota

    Un diseñador (como Visual Studio 2005) realizará la conexión de este evento generando código similar al código de este ejemplo.

Ejemplo

En el siguiente ejemplo de código se controla el evento Click de un control Button para cambiar el color de fondo de un control TextBox. Los elementos en negrita muestran el controlador de eventos y cómo se conecta al evento Click de la instancia de Button.

El código de este ejemplo se ha escrito sin utilizar un diseñador visual (como Visual Studio 2005) y solamente contiene los elementos de programación esenciales. Si utiliza un diseñador, generará código adicional.

Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Drawing

Public Class MyForm
    Inherits Form
    Private box As TextBox
    Private WithEvents myButton As Button

    Public Sub New()
        box = New TextBox()
        box.BackColor = System.Drawing.Color.Cyan
        box.Size = New Size(100, 100)
        box.Location = New Point(50, 50)
        box.Text = "Hello"

        myButton = New Button()
        myButton.Location = New Point(50, 100)
        myButton.Text = "Click Me"

        AddHandler myButton.Click, AddressOf Me.Button_Click

        Controls.Add(box)
        Controls.Add(myButton)
    End Sub

    ' The event handler.
    Private Sub Button_Click(sender As Object, e As EventArgs)
        box.BackColor = System.Drawing.Color.Green
    End Sub

    ' The STAThreadAttribute indicates that Windows Forms uses the
    ' single-threaded apartment model.
    <STAThread> _
    Public Shared Sub Main()
        Application.Run(New MyForm())
    End Sub
End Class
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;

public class MyForm : Form
{
    private TextBox box;
    private Button button;

    public MyForm() : base()
    {
        box = new TextBox();
        box.BackColor = System.Drawing.Color.Cyan;
        box.Size = new Size(100,100);
        box.Location = new Point(50,50);
        box.Text = "Hello";

        button = new Button();
        button.Location = new Point(50,100);
        button.Text = "Click Me";

        // To wire the event, create
        // a delegate instance and add it to the Click event.
        button.Click += new EventHandler(this.Button_Click);
        Controls.Add(box);
        Controls.Add(button);
    }

    // The event handler.
    private void Button_Click(object sender, EventArgs e)
    {
        box.BackColor = System.Drawing.Color.Green;
    }

    // The STAThreadAttribute indicates that Windows Forms uses the
    // single-threaded apartment model.
    [STAThread]
    public static void Main()
    {
        Application.Run(new MyForm());
    }
}
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::Windows::Forms;

public ref class MyForm : Form
{
private:
    TextBox^ box;
    Button^ button;

public:
    MyForm() : Form()
    {
        box = gcnew TextBox();
        box->BackColor = System::Drawing::Color::Cyan;
        box->Size = System::Drawing::Size(100,100);
        box->Location = System::Drawing::Point(50,50);
        box->Text = "Hello";

        button = gcnew Button();
        button->Location = System::Drawing::Point(50,100);
        button->Text = "Click Me";

        // To wire the event, create
        // a delegate instance and add it to the Click event.
        button->Click += gcnew EventHandler(this, &MyForm::Button_Click);
        Controls->Add(box);
        Controls->Add(button);
    }

private:
    // The event handler.
    void Button_Click(Object^ sender, EventArgs^ e)
    {
        box->BackColor = System::Drawing::Color::Green;
    }

    // The STAThreadAttribute indicates that Windows Forms uses the
    // single-threaded apartment model.
public:
    [STAThread]
    static void Main()
    {
        Application::Run(gcnew MyForm());
    }
};

int main()
{
    MyForm::Main();
}

Compilar el código

Guarde el código anterior en un archivo (con extensión .cs si es un archivo de C# y .vb si es de Visual Basic 2005), compile y ejecútelo. Por ejemplo, si el archivo de código fuente se denomina WinEvents.cs (o WinEvents.vb), ejecute el comando siguiente.

vbc /r:System.DLL /r:System.Windows.Forms.dll /r:System.Drawing.dll WinEvents.vb
csc /r:System.DLL /r:System.Windows.Forms.dll /r:System.Drawing.dll WinEvents.vb
cl /clr:pure WinEvents.cpp

El archivo ejecutable se denominará WinEvents.exe.

Vea también

Conceptos

Eventos y delegados

Utilizar eventos

Provocar un evento

Otros recursos

Controlar y provocar eventos