Übersicht über Ereignisse (Windows Forms)

Ein Ereignis ist eine Aktion, auf die Sie antworten oder im Code „behandeln“ können. Ereignisse können durch eine Benutzeraktion generiert werden, z. B. durch Klicken mit der Maus oder Drücken auf eine Taste; durch Programmcode; oder durch das System.

Ereignisgesteuerte Anwendungen führen Code als Reaktion auf ein Ereignis aus. Jedes Formular und jedes Steuerelement macht eine vordefinierte Gruppe von Ereignissen verfügbar, die Sie programmieren können. Wenn eines dieser Ereignisse auftritt und Code im zugeordneten Ereignishandler vorhanden ist, wird der Code aufgerufen.

Die von einem Objektarray ausgelösten Ereignistypen unterscheiden sich, viele ähneln aber den meisten Steuerelementen. Die meisten Objekte behandeln beispielsweise ein Click-Ereignis. Wenn ein Benutzer auf ein Formular klickt, wird der Code im Click-Ereignishandler des Formulars ausgeführt.

Hinweis

Viele Ereignisse treten im Zusammenhang mit anderen Ereignissen auf. Wenn beispielsweise ein DoubleClick-Ereignis auftritt, treten auch die MouseDown, MouseUp- und Click-Ereignisse auf.

Weitere Informationen zum Auslösen und Nutzen eines Ereignisses finden Sie unter Ereignisse.

Delegaten und ihre Rolle

Delegaten sind Klassen, die häufig in den im .NET Framework zu erstellenden ereignishandlerischen Mechanismen verwendet werden. Delegaten entsprechen in etwa Funktionszeigern, die häufig in Visual C++ und anderen objektorientierten Sprachen verwendet werden. Im Gegensatz zu Funktionszeigern sind Delegaten objektorientiert, typsicher und sicher. Darüber hinaus bestehen Sie im Vergleich zu Funktionszeigern, die nur einen Verweis zu einer bestimmten Funktion enthalten, aus einem Verweis zu einem Objekt und Verweisen zu einem oder mehren Methoden in dem Objekt.

Im Ereignismodell werden Delegaten zum Binden von Ereignissen an Methoden zur Behandlung dieser Ereignisse verwendet. Mit dem Delegat können andere Klassen für eine Ereignisbenachrichtigung registriert werden, indem eine Handlermethode angegeben wird. Wenn das Ereignis auftritt, ruft der Delegat die gebundene Methode auf. Weitere Informationen zum Definieren von Delegaten finden Sie unter Ereignisse.

Delegaten können an eine einzelne oder mehrere Methoden gebunden werden, das bezeichnet man als Multicasting. Beim Erstellen eines Delegaten für ein Ereignis erstellen Sie (oder Windows) in der Regel ein Multicast-Ereignis. Eine seltene Ausnahme dazu ist möglicherweise ein Ereignis, das zu einer bestimmten Prozedur führt (z. B. das Anzeigen eines Dialogfelds), die logischerweise nicht mehrmals pro Ereignis auftritt. Informationen zum Erstellen von Multicastdelegaten finden Sie unter Kombinieren von Delegaten (Multicastdelegaten).

Ein Multicast-Delegat verwaltet eine Aufrufliste der Methoden, an die er gebunden ist. Der Multicast-Delegat unterstützt eine Combine-Methode zum Hinzufügen einer Methode zur Aufrufliste und eine Remove-Methode, um sie zu entfernen.

Wenn ein Ereignis von der Anwendung aufgezeichnet wird, löst das Steuerelement das Ereignis aus, indem es den Delegaten für das Ereignis aufruft. Der Delegat wiederum ruft die gebundene Methode auf. Im häufigsten Fall (einem Multicast-Delegat) ruft der Delegat wiederum jede gebundene Methode in der Aufrufliste auf, sodass eine eins-zu-viele-Benachrichtigung bereitgestellt wird. Das heißt, das Steuerelement muss keine Zielobjektliste für die Ereignisbenachrichtigung verwalten – der Delegat behandelt alle Registrierungen und Benachrichtigungen.

Mit Delegaten können auch mehrere Ereignisse an dieselbe Methode gebunden werden, sodass eine viele-zu-eins-Benachrichtigung bereitgestellt werden kann. Ein Klick-Ereignis einer Schaltfläche und ein Menübefehl-Klick-Ereignis können beide denselben Delegaten aufrufen, der dann eine einzelne Methode aufruft, um diese separaten Ereignisse gleich zu behandeln.

Der mit Delegaten verwendete Bindungsmechanismus ist dynamisch: ein Delegat kann zur Laufzeit an jede Methode gebunden werden, dessen Signatur mit der des Ereignishandlers übereinstimmt. Mit dieser Funktion können Sie die gebundene Methode abhängig von einer Bedingung einrichten oder ändern und einen Ereignishandler dynamisch an ein Steuerelement anfügen.

Siehe auch