Condividi tramite


Procedura: utilizzare eventi in un'applicazione Windows Form

Uno scenario comune nelle applicazioni Windows Form consiste nella visualizzazione di un form contenente alcuni controlli e nella successiva esecuzione di un'operazione specifica in base al controllo selezionato dall'utente. Il controllo Button, ad esempio, genera un evento quando un utente fa clic su di esso nel form. Tramite la gestione dell'evento, l'applicazione esegue la logica appropriata all'azione dell'utente.

Per ulteriori informazioni sui Windows Form, vedere Guida introduttiva a Windows Form.

Per gestire un evento Click su un pulsante in Windows Form

  1. Creare un Windows Form contenente un controllo Button.

    Private WithEvents myButton As Button
    
    private Button button;
    
    private:
        Button^ button;
    
  2. Definire un gestore eventi corrispondente alla firma del delegato dell'evento Click. L'evento Click utilizza la classe EventHandler per il tipo delegato e la classe EventArgs per i dati dell'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. Aggiungere il metodo per la gestione degli eventi all'evento Click del controllo Button.

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

    Nota

    In uno strumento di progettazione come Visual Studio 2005, il collegamento dell'evento viene eseguito automaticamente tramite la generazione di codice simile a quello rappresentato nell'esempio.

Esempio

Nell'esempio di codice seguente viene illustrata la gestione dell'evento Click di un controllo Button per modificare il colore di sfondo di un oggetto TextBox. Gli elementi riportati in grassetto corrispondono al gestore eventi e ne illustrano il collegamento all'evento Click dell'istanza di Button.

Il codice riportato in questo esempio è stato scritto senza utilizzare uno strumento di progettazione visiva quale Visual Studio 2005e contiene solo gli elementi di programmazione essenziali. Se si utilizza uno strumento di progettazione, questo genererà codice aggiuntivo.

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();
}

Compilazione del codice

Salvare il precedente codice in un file con estensione cs o vb (rispettivamente per C# e Visual Basic 2005), compilarlo ed eseguirlo. Se ad esempio il file di origine è denominato WinEvents.cs o WinEvents.vb, utilizzare il comando riportato di seguito:

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

Il file eseguibile derivante sarà denominato WinEvents.exe.

Vedere anche

Concetti

Eventi e delegati

Utilizzo degli eventi

Generazione di un evento

Altre risorse

Gestione e generazione di eventi