Funktionsweise von Tastatureingaben

Windows Forms verarbeitet Tastatureingaben, indem als Reaktion auf Windows-Meldungen Tastaturereignisse ausgelöst werden. Die meisten Windows Forms-Anwendungen verarbeiten Tastatureingaben ausschließlich durch Bearbeiten der Tastaturereignisse. Sie müssen jedoch die Funktionsweise von Tastaturnachrichten verstehen, damit Sie erweiterte Tastatureingabeszenarios implementieren können, wie z.B. das Abfangen von Schlüssel, bevor diese ein Steuerelement erreichen. Dieses Thema beschreibt die Typen von Schlüsseldaten, die Windows Forms erkennt, und bietet eine Übersicht darüber, wie Tastaturnachrichten weitergeleitet werden. Informationen zu Tastaturereignissen finden Sie unter Verwenden von Tastaturereignissen.

Typen von Tasten

Windows Forms identifiziert Tastatureingaben als virtuelle Tastencodes, die durch die bitweise Keys-Enumeration dargestellt werden. Mit der Keys-Enumeration können Sie eine Reihe gedrückter Tasten in einem einzelnen Wert kombinieren. Diese Werte entsprechen den Werten, die in den Windows-Nachrichten WM_KEYDOWN und WM_SYSKEYDOWN enthalten sind. Das Drücken der meisten physischen Tasten lässt sich durch Verarbeitung der Ereignisse KeyDown oder KeyUp erkennen. Zeichentasten sind eine Teilmenge der Keys-Enumeration. Sie entsprechen den Werten, die in den Windows-Meldungen WM_CHAR und WM_SYSCHAR enthalten sind. Wenn durch Drücken einer Tastenkombination ein Zeichen entsteht, können Sie das Zeichen durch Bearbeitung des Ereignisses KeyPress erkennen. Alternativ können Sie Keyboard verwenden, das von der Visual Basic-Programmierschnittstelle ausgeführt wird, um zu ermitteln, welche Taste gedrückt wurde, und um Tastaturcodes zu senden. Weitere Informationen finden Sie unter Zugreifen auf die Tastatur.

Reihenfolge von Tastaturereignissen

Wie oben aufgeführt gibt es drei mit der Tastatur verknüpfte Ereignisse, die in einem Steuerelement auftreten können. Die folgende Sequenz zeigt die allgemeine Reihenfolge der Ereignisse:

  1. Der Benutzer drückt die Taste „a“, die Taste wird vorverarbeitet und gesendet, und ein Ereignis vom Typ KeyDown tritt auf.

  2. Der Benutzer hält die Taste „a“ gedrückt, die Taste wird vorverarbeitet und gesendet, und ein Ereignis vom Typ KeyPress tritt auf.

    Dieses Ereignis tritt mehrmals auf, wenn der Benutzer eine Taste gedrückt hält.

  3. Der Benutzer lässt die Taste „a“ los, die Taste wird vorverarbeitet und gesendet, und ein Ereignis vom Typ KeyUp tritt auf.

Vorverarbeiten von Tasten

Tastaturnachrichten werden wie andere Nachrichten in der Methode WndProc eines Formulars oder Steuerelements verarbeitet. Vor der Verarbeitung der Tastaturnachrichten ruft die Methode PreProcessMessage jedoch mindestens eine Methode auf, die überschrieben werden kann, um Sonderzeichentasten und physische Tasten zu verarbeiten. Sie können diese Methoden zum Erkennen und Filtern bestimmter Tasten überschreiben, bevor die Nachrichten vom Steuerelement verarbeitet werden. Die folgende Tabelle zeigt die Aktion an, die ausgeführt wird und die zugehörige Methode die auftritt, in der Reihenfolge, in der die Methode auftritt.

Vorverarbeiten eines KeyDown-Ereignisses

Aktion Verknüpfte Methode Hinweise
Überprüfen Sie, ob eine Befehlstaste vorhanden ist, z.B. eine Zugriffstaste oder eine Menü-Tastenkombination. ProcessCmdKey Diese Methode verarbeitet eine Befehlstaste, die Vorrang gegenüber regulären Tasten hat. Wenn diese Methode true zurückgibt, wird die Schlüsselmeldung nicht weitergeleitet, und es tritt kein Schlüsselereignis auf. Wenn false zurückgegeben wird, wird IsInputKey aufgerufen.
Suchen Sie nach einer Sondertaste, für die eine Vorverarbeitung erforderlich ist, oder nach einer normalen Zeichentaste, die ein Ereignis vom Typ KeyDown auslösen und an ein Steuerelement weitergeleitet werden sollte. IsInputKey Wenn die Methode true zurückgibt, bedeutet dies, dass das Steuerelement ein normales Zeichen ist und ein Ereignis vom Typ KeyDown ausgelöst wird. Bei false wird ProcessDialogKey aufgerufen. Hinweis: Sie können das PreviewKeyDown-Ereignis verarbeiten und IsInputKey der Klasse PreviewKeyDownEventArgs für die gewünschten Tasten auf true festlegen, um sicherzustellen, dass ein Steuerelement eine Taste oder eine Kombination aus Tasten erhält.
Führen Sie eine Überprüfung auf eine Navigationstaste aus (ESC-, TAB-, Return oder Pfeiltaste). ProcessDialogKey Diese Methode verarbeitet eine physische Taste, die eine besondere Funktionalität innerhalb des Steuerelements nutzt und z.B. den Fokus zwischen dem Steuerelement und seinem übergeordneten Element umschaltet. Wenn die Taste nicht vom direkten Steuerelement verarbeitet wird, wird ProcessDialogKey im übergeordneten Steuerelement aufgerufen. Dies kann so lange fortgesetzt werden, bis das Steuerelement erreicht ist, das in der Hierarchie an oberster Stelle steht. Wenn diese Methode true zurückgibt, ist die Vorverarbeitung abgeschlossen, und es wird kein Tastenereignis generiert. Wenn false zurückgegeben wird, tritt ein KeyDown-Ereignis auf.

Vorverarbeiten eines KeyPress-Ereignisses

Aktion Verknüpfte Methode Hinweise
Überprüfen Sie, ob die Taste ein normales Zeichen darstellt, das vom Steuerelement verarbeitet werden sollte IsInputChar Wenn es sich bei dem Zeichen um ein normales Zeichen handelt, gibt diese Methode true zurück, das Ereignis KeyPress wird ausgelöst, und es kommt zu keiner weiteren Vorverarbeitung. Andernfalls wird ProcessDialogChar aufgerufen.
Überprüfen Sie, ob es sich bei dem Zeichen um ein mnemonisches Zeichen handelt (z.B. &OK auf einer Schaltfläche) ProcessDialogChar Diese Methode wird ähnlich wie ProcessDialogKey aufsteigend entlang der Hierarchie des Steuerelements aufgerufen. Wenn es sich bei dem Steuerelement um ein Containersteuerelement handelt, sucht es nach mnemonischen Zeichen, indem es ProcessMnemonicfür sich und seine untergeordneten Steuerelemente aufruft. Wenn true von ProcessDialogChar zurückgegeben wird, tritt kein KeyPress-Ereignis auf.

Verarbeiten von Tastaturmeldungen

Nachdem Tastaturmeldungen die Methode WndProc eines Formulars oder Steuerelements erreicht haben, werden sie durch eine Reihe von Methoden verarbeitet, die überschrieben werden können. Jede dieser Methoden gibt einen Boolean-Wert zurück, der angibt, ob die Tastaturmeldung verarbeitet und vom Steuerelement verwendet wurde. Wenn eine der Methoden true zurückgibt, dann gilt die Nachricht als bearbeitet. Sie wird nicht zur weiteren Verarbeitung an das Basiselement oder das übergeordnete Element des Steuerelements übergeben. Andernfalls bleibt die Nachricht in der Nachrichtenwarteschlange und kann in einer anderen Methode im Basiselement oder übergeordneten Element des Steuerelements verarbeitet werden. Die folgende Tabelle enthält die Methoden, die Tastaturmeldungen verarbeiten.

Methode Hinweise
ProcessKeyMessage Diese Methode verarbeitet alle Tastaturmeldungen, die von der WndProc-Methode des Steuerelements empfangen werden.
ProcessKeyPreview Diese Methode sendet die Tastaturmeldung an das übergeordnete Element des Steuerelements. Wenn ProcessKeyPreviewtrue zurückgibt, wird kein Tastenereignis generiert, andernfalls wird ProcessKeyEventArgs aufgerufen.
ProcessKeyEventArgs Diese Methode löst je nach Anforderung die Ereignisse KeyDown, KeyPress und KeyUp auf.

Überschreiben von Tastaturmethoden

Es sind viele Methoden zum Überschreiben verfügbar, wenn eine Tastaturmeldung vorverarbeitet und verarbeitet wird. Einige Methoden sind jedoch besser geeignet als andere. Die folgende Tabelle enthält Aufgaben, die Sie möglicherweise ausführen möchten, sowie die beste Methode für das Überschreiben der Tastaturmethoden. Weitere Informationen zum Überschreiben von Methoden finden Sie unter Überschreiben von Eigenschaften und Methoden in abgeleiteten Klassen.

Aufgabe Methode
Bei dieser Aufgabe wird eine Navigationstaste abgefangen und ein KeyDown-Ereignis ausgelöst. Beispiel: Sie möchten, dass die TAB- und die Return-Taste in einem Textfeld bearbeitet werden. Überschreiben Sie IsInputKey. Hinweis: Alternativ können Sie das PreviewKeyDown-Ereignis verarbeiten und IsInputKey der PreviewKeyDownEventArgs-Klasse für die gewünschten Tasten auf true festlegen.
Nehmen Sie bei einem Steuerelement eine besondere Eingabe oder Navigationsbehandlung vor. Beispiel: Sie möchten bei dem ausgewählten Element die Verwendung der Pfeiltasten in Ihrem Listensteuerelement ändern. Überschreiben Sie ProcessDialogKey.
Bei dieser Aufgabe wird eine Navigationstaste abgefangen und ein KeyPress-Ereignis ausgelöst. Beispiel: Sie möchten, dass durch mehrfaches Drücken der Pfeiltaste in einem Drehfeld-Steuerelement der Fortschritt durch die Elemente beschleunigt wird. Überschreiben Sie IsInputChar.
Bei dieser Aufgabe wird die Verarbeitung einer Sondereingabe oder Navigation während eines KeyPress-Ereignisses durchgeführt. Beispiel: Wenn in einem Listensteuerelement die Taste „r“ gedrückt gehalten wird, werden Elemente übersprungen, die mit diesem Buchstaben beginnen. Überschreiben Sie ProcessDialogChar.
Führen Sie eine benutzerdefinierte Bearbeitung mnemonischer Zeichen durch. Beispiel: Sie möchten mnemonische Zeichen in von Benutzern gezeichneten Schaltflächen bearbeiten, die in einer Symbolleiste enthalten sind. Überschreiben Sie ProcessMnemonic.

Siehe auch