Moderne Programme mit grafischer Benutzeroberfläche (GUI = graphical user interface) werden im Ablauf durch Ereignisse gesteuert. Solche Ereignisse sind zumeist Tastatureingaben oder Mausklicks des Benutzers.
Vergegenwärtigen Sie sich einmal, wie Sie eine GUI-Anwendung handhaben.
Vor Ihnen liegt ein Fenster mit Auswahlmenüs und Steuerknöpfen (Buttons). Aktivieren Sie einen Menüeintrag oder einen Button, dann öffnet sich häufig ein Dialogfenster oder ein Meldefenster. Irgendwann schließen Sie ein solches untergeordnetes Fenster mit einem Tastendruck oder einem Mausklick. In einem Dialog(fenster) können Sie häufig in Eingabezeilen etwas eingeben. Aktivierungskästchen (Checkboxes) und Auswahlkästchen (Radiobuttons) werden ebenfalls mit Tastatur oder zumeist mit Mausklicks aktiviert beziehungsweise deaktiviert.
Wie soll die GUI-Anwendung auf Ihre Aktionen reagieren?
Bei alledem erwarten Sie als Benutzer, dass das Programm umgehend auf Ihre Aktionen reagiert. In einer GUI-Anwendung stehen aber viele solcher Bedienungselemente zur Verfügung. Auf jede Benutzerverwendung eines Bedienungselementes muss die Anwendung angemessen reagieren. In diesem Zusammenhang bedeutet "angemessen", dass Sie als Anwender nicht zuerst 10 Tastatureingaben tätigen müssen, bevor das, was Sie erreichen wollen, auch wirklich stattfindet.
Das Szenario aus der Sicht der Anwendung (unten "ich" genannt) sieht etwa so aus:
Ich warte bis etwas passiert, für das ich zuständig bin.
Trifft ein Ereignis ein, für das ich zuständig bin, behandle ich dieses Ereignis.
Was ist für eine Anwendung ein Ereignis?
Zunächst gibt es fundamentale Ereignisse wie ein Tastendruck oder ein Mausklick. Eine Anwendung darf aber nicht diffus auf jeden Tastendruck oder auf jeden Mausklick irgendwie reagieren. In diesem Sinne ist ein Ereignis beispielsweise das Anklicken eines bestimmten Buttons. Das Anklicken eines anderen Buttons oder eines Menüeintrages sind zwei andere Ereignisse. Auf das Drücken unterschiedlicher Knöpfe an einer Stereoanlage soll diese Anlage ja auch unterschiedlich reagieren.
Ereignisbehandlung aus der Sicht einer Programmiererin
Es darf auch ein Programmierer sein.
Damit eine Programmiererin nicht immer wieder alles selbst implementieren ("das Rad immer wieder neu erfinden") muss, fängt das Betriebssystem Ereignisse ab und leitet Nachrichten über diese Ereignisse an die Anwendung weiter. Die Programmiererin muss nur noch für jede vom Betriebssystem eintreffende Ereignisnachricht ein passendes Unterprogramm (Eventhandler) erstellen, welches für die Behandlung des Ereignisses verantwortlich ist. Die Zuordnung eines Eventhandlers zu einem Ereignis wird in einer Eventhandler-Tabelle festgehalten. Ein Eintrag ist ein geordnetes Paar bestehend aus Ereigniskennnummer und Anfangsadresse des Eventhandlers. Trifft ein Ereignis ein, wird in der Tabelle nach einem Ereigniseintrag gesucht und, falls gefunden, der in der Tabelle zugeordnete Eventhandler aufgerufen. Damit dies ohne viel Verwaltungsaufwand möglich ist, müssen alle Eventhandler dieselbe Signatur aufweisen (vgl. virtuelle Methoden und VMT).
Wenn ein Betriebssystem eine Anwendung über ein eingetretenes Ereignis informiert, wird dies auch als Nachricht bezeichnet. In diesem Sinne sind Eventhandler auch Nachrichtenbehandler.
Auf der folgenden Seite gibt es ein sehr grundlegendes Beispiel für eine Ereignisbehandlung nach dem oben dargestellten Prinzip.