Freigeben über


Übersicht über Ereignisse (Windows Forms .NET)

Bei einem Ereignis handelt es sich um eine Aktion, auf die Sie reagieren oder die Sie mittels Code „behandeln“ können. Ereignisse können durch eine Benutzeraktion generiert werden, z. B. durch Klicken mit der Maus oder Drücken einer 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.

Informationen zum Auslösen und Nutzen eines Ereignisses finden Sie unter Behandeln und Auslösen von Ereignissen.

Delegaten und ihre Rolle

Delegaten sind Klassen, die häufig in den in .NET zu erstellenden Mechanismen zur Behandlung von Ereignissen 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 auf eine bestimmte Funktion enthalten, aus einem Verweis auf ein Objekt und Verweisen auf mindestens eine Methode 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 Behandeln und Auslösen von Ereignissen.

Delegaten können an eine einzelne oder mehrere Methoden gebunden werden, das bezeichnet man als Multicasting. Beim Erstellen eines Delegaten für ein Ereignis wird in der Regel ein Multicastereignis erstellt. 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).

Mit einem Multicastdelegat wird eine Aufrufliste der Methoden verwaltet, 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 Multicastdelegat) wird wiederum vom Delegat jede gebundene Methode in der Aufrufliste aufgerufen, sodass eine 1:n-Benachrichtigung bereitgestellt wird. Das heißt, Zielobjektlisten für die Ereignisbenachrichtigung müssen nicht vom Steuerelement verwaltet werden, da alle Registrierungen und Benachrichtigungen vom Delegat behandelt werden.

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