Gewusst wie: Verarbeiten von Ereignissen in einer Windows Forms-Anwendung

In Windows Forms-Anwendungen wird häufig ein Formular mit Steuerelementen angezeigt und dann basierend auf dem Steuerelement, auf das der Benutzer klickt, ein bestimmter Vorgang ausgelöst. So löst z. B. ein Button-Steuerelement ein Ereignis aus, wenn der Benutzer auf dem Formular darauf klickt. Indem sie das Ereignis behandelt, kann die Anwendung die dem Klicken auf die Schaltfläche entsprechende Anwendungslogik ausführen.

Weitere Informationen zu Windows Forms finden Sie unter Erste Schritte mit Windows Forms.

So behandeln Sie ein Click-Ereignis für eine Schaltfläche auf einem Windows Form

  1. Erstellen Sie ein Windows Form, das über ein Button-Steuerelement verfügt.

    Private WithEvents myButton As Button
    
    private Button button;
    
    private:
        Button^ button;
    
  2. Definieren Sie einen Ereignishandler, der der Signatur des Delegaten für das Click-Ereignis entspricht. Das Click-Ereignis verwendet die EventHandler-Klasse für den Delegattyp und die EventArgs-Klasse für die Ereignisdaten.

    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. Fügen Sie die Ereignishandlermethode dem Click-Ereignis des Button hinzu.

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

    Ein Designer (z. B. Visual Studio 2005) übernimmt das Verknüpfen des Ereignisses durch das Generieren von Code, der dem in diesem Beispiel verwendeten Code entspricht.

Beispiel

Das folgende Codebeispiel behandelt das Click-Ereignis von Button, um die Hintergrundfarbe für TextBox zu ändern. Die fett dargestellten Elemente zeigen den Ereignishandler und veranschaulichen, wie dieser mit dem Click-Ereignis von Button verknüpft wird.

Der Code in diesem Beispiel wurde ohne einen visuellen Designer wie Visual Studio 2005 verfasst und enthält nur die wichtigsten Programmierungselemente. Wenn Sie einen Designer verwenden, generiert dieser zusätzlichen Code.

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

Kompilieren des Codes

Speichern Sie den oben stehenden Code in einer Datei (mit der Erweiterung .cs für eine C#-Datei und .vb für Visual Basic 2005). Kompilieren Sie die Datei, und führen Sie sie aus. Wenn die Quelldatei z. B. den Namen WinEvents.cs bzw. WinEvents.vb aufweist, führen Sie den folgenden Befehl aus:

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

Die ausführbare Datei erhält den Namen WinEvents.exe.

Siehe auch

Konzepte

Ereignisse und Delegaten

Behandeln von Ereignissen

Auslösen eines Ereignisses

Weitere Ressourcen

Behandeln und Auslösen von Ereignissen