Gewusst wie: Verarbeiten von Ereignissen in einer Windows Forms-Anwendung
Aktualisiert: November 2007
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
Erstellen Sie ein Windows Form, das über ein Button-Steuerelement verfügt.
private Button button;
Private WithEvents myButton As Button
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.
void Button_Click(object sender, EventArgs e) {...}
Sub Button_Click(sender As Object, e As EventArgs) ... End Sub
Fügen Sie die Ereignishandlermethode dem Click-Ereignis des Button hinzu.
button.Click += new EventHandler(this.Button_Click);
AddHandler myButton.Click, AddressOf Me.Button_Click
Hinweis: 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.
[C#]
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.
[STAThreadAttribute]
public static void Main(string[] args)
{
Application.Run(new MyForm());
}
}
[Visual Basic]
Option Strict On
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.
<STAThreadAttribute()> _
Public Shared Sub Main(args() As String)
Application.Run(New MyForm())
End Sub
End Class
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:
csc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.cs
vbc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.vb
Die ausführbare Datei erhält den Namen WinEvents.exe.