Share via


Funktionsweise von Tastatureingaben

Aktualisiert: November 2007

Windows Forms verarbeitet Tastatureingaben, indem als Reaktion auf Windows-Meldungen Tastaturereignisse ausgelöst werden. Die meisten Windows Forms-Anwendungen verarbeiten Tastatureingaben ausschließlich, indem sie die Tastaturereignisse behandeln. Sie müssen sich jedoch vergegenwärtigen, wie Tastaturmeldungen funktionieren, um erweiterte Tastatureingabeszenarien, wie das Abfangen von Tastenwerten, bevor sie ein Steuerelement erreichen, implementieren zu können. In diesem Thema werden die Typen von Tastendaten beschrieben, die von Windows Forms erkannt werden. Außerdem enthält es eine Übersicht darüber, wie Tastaturmeldungen weitergeleitet werden. Informationen zu Tastaturereignissen finden Sie unter Verwenden von Tastaturereignissen.

Arten 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 Folge gedrückter Tasten in einem Wert ausgeben lassen. Diese Werte entsprechen den Werten, die mit den Windows-Meldungen WM_KEYDOWN und WM_SYSKEYDOWN gesendet werden. Sie können die meisten Betätigungen physikalischer Tasten erkennen, indem Sie das KeyDown-Ereignis oder das KeyUp-Ereignis behandeln. Zeichentasten bilden eine Untergruppe der Keys-Enumeration und entsprechen den Werten, die mit den Windows-Meldungen WM_CHAR und WM_SYSCHAR gesendet werden. Wenn mehrere gedrückte Tasten zu einem Zeichen zusammengefasst sind, können Sie das Zeichen erkennen, indem Sie das KeyPress-Ereignis behandeln. Alternativ können Sie das von der Visual Basic-Programmierschnittstelle verfügbar gemachte Element Keyboard verwenden. Damit stellen Sie fest, welche Tasten gedrückt wurden, und senden die entsprechenden Tastenwerte. Weitere Informationen finden Sie unter Zugreifen auf die Tastatur.

Reihenfolge von Tastaturereignissen

Wie oben aufgelistet, gibt es drei tastaturbezogene Ereignisse, die in einem Steuerelement auftreten können. Die folgende Abfolge entspricht der allgemeinen Reihenfolge der Ereignisse:

  1. Der Benutzer drückt die Taste "a", die Taste wird vorverarbeitet und gesendet, und ein KeyDown-Ereignis tritt ein.

  2. Der Benutzer hält die Taste "a" gedrückt, die Taste wird vorverarbeitet und gesendet, und ein KeyPress-Ereignis tritt ein.

    Während der Benutzer eine Taste gedrückt hält, wird dieses Ereignis mehrfach wiederholt.

  3. Der Benutzer lässt die Taste "a" los, die Taste wird vorverarbeitet und gesendet, und ein KeyUp-Ereignis tritt ein.

Vorverarbeiten von Tasten

Wie andere Meldungen werden Tastaturmeldungen in der WndProc-Methode eines Formulars oder eines Steuerelements verarbeitet. Bevor Tastaturmeldungen verarbeitet werden, ruft die PreProcessMessage-Methode jedoch eine oder mehrere Methoden auf, die überschrieben werden können, um bestimmte Zeichentasten und physikalische Tasten zu behandeln. Sie können diese Methoden überschreiben, um bestimmte Tasten zu erkennen und zu filtern, bevor die Meldungen vom Steuerelement verarbeitet werden. Der folgenden Tabelle können Sie die ausgeführte Aktion sowie die zugehörige Methode in der Reihenfolge entnehmen, in der die Methode auftritt.

Vorverarbeitung für ein KeyDown-Ereignis.

Aktion

Verwandte Methode

Hinweise

Suchen nach einer Befehlstaste, z. B. einer Zugriffstaste oder einer Menüverknüpfung.

ProcessCmdKey

Diese Methode verarbeitet eine Befehlstaste, die Vorrang gegenüber regulären Tasten hat. Wenn diese Methode true zurückgibt, wird die Tastenmeldung nicht weitergeleitet, und es tritt kein Tastenereignis ein. Wenn sie false zurückgibt, wird IsInputKey aufgerufen.

Überprüfen, ob es sich um eine bestimmte Taste handelt, für die Vorverarbeitung erforderlich ist, oder um ein normales Zeichen, durch das ein KeyDown-Ereignis ausgelöst wird, und das an ein Steuerelement weitergeleitet werden soll.

IsInputKey

Wenn die Methode true zurückgibt, bedeutet dies, dass das Steuerelement ein normales Zeichen ist und ein KeyDown-Ereignis ausgelöst wird. Bei false wird ProcessDialogKey aufgerufen.

Hinweis:
Um sicherzustellen, dass ein Steuerelement eine Taste oder eine Tastenkombination abruft, können Sie das PreviewKeyDown-Ereignis behandeln und IsInputKey von PreviewKeyDownEventArgs für die gewünschte Taste bzw. die gewünschten Tasten auf true festlegen.

Überprüfen, ob die Taste eine Navigationstaste (ESC, TAB, EINGABE oder Pfeiltasten) ist.

ProcessDialogKey

Durch diese Methode wird eine physikalische Taste verarbeitet, die bestimmte Funktionalität innerhalb des Steuerelements implementiert, beispielsweise das Verschieben des Fokus von einem Steuerelement zu seinem übergeordneten Element. Falls die Taste vom unmittelbaren Steuerelement nicht behandelt wird, wird ProcessDialogKey für das übergeordnete Steuerelement und danach für alle weiteren Steuerelemente bis zum Anfang der Hierarchie aufgerufen. Wenn diese Methode true zurückgibt, ist die Vorverarbeitung abgeschlossen, und es wird kein Tastenereignis generiert. Wenn sie false zurückgibt, tritt ein KeyDown-Ereignis ein.

Vorverarbeitung für ein KeyPress-Ereignis

Aktion

Verwandte Methode

Hinweise

Überprüfen, ob die Taste ein normales Zeichen ist, das vom Steuerelement verarbeitet werden soll.

IsInputChar

Wenn die Taste ein normales Zeichen ist, gibt diese Methode true zurück, das KeyPress-Ereignis wird ausgelöst, und es findet keine weitere Vorverarbeitung statt. Andernfalls wird ProcessDialogChar aufgerufen.

Überprüfen, ob das Zeichen ein mnemonisches Zeichen ist (beispielsweise &OK für eine Schaltfläche).

ProcessDialogChar

Diese Methode wird ähnlich wie ProcessDialogKey für jedes Steuerelement bis zum obersten Element in der Hierarchie aufgerufen. Wenn es sich bei dem Steuerelement um ein Containersteuerelement handelt, sucht es nach mnemonischen Zeichen, indem es ProcessMnemonic für sich selbst und alle untergeordneten Steuerelemente aufruft. Wenn ProcessDialogChar den Wert true zurückgibt, tritt kein KeyPress-Ereignis ein.

Verarbeiten von Tastaturmeldungen

Nachdem die Tastaturmeldungen die WndProc-Methode eines Formulars oder Steuerelements erreicht haben, werden sie von einer Gruppen 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 konsumiert wurde. Wenn eine der Methoden true zurückgibt, wird die Meldung als behandelt betrachtet und nicht zur weiteren Verarbeitung an das Basiselement oder übergeordnete Element des Steuerelements übergeben. Andernfalls verbleibt die Meldung in der Meldungswarteschlange und wird möglicherweise in einer anderen Methode im Basiselement oder übergeordneten Element des Steuerelements verarbeitet. In der folgenden Tabelle werden die Methoden dargestellt, 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 ProcessKeyPreview den Wert true zurückgibt, wird kein Tastenereignis generiert, andernfalls wird ProcessKeyEventArgs aufgerufen.

ProcessKeyEventArgs

Diese Methode löst die Ereignisse KeyDown, KeyPress bzw. KeyUp aus.

Überschreiben von Tastaturmethoden

Wenn eine Tastaturmeldung vorverarbeitet und verarbeitet wird, sind viele Methoden zum Überschreiben verfügbar. Einige Methoden sind jedoch besser geeignet als andere. In der folgenden Tabelle sind mögliche Aufgaben und der optimale Weg zum Überschreiben der Tastaturmethoden aufgeführt. Weitere Informationen zum Überschreiben von Methoden finden Sie unter Überschreiben von Eigenschaften und Methoden.

Aufgabe

Methode

Abfangen einer Navigationstaste und Auslösen eines KeyDown-Ereignisses. Beispielsweise sollen TAB- und EINGABETASTE in einem Textfeld behandelt werden.

Überschreiben Sie IsInputKey.

Behandlung bestimmter Eingaben oder Navigationstasten für ein Steuerelement. Möglicherweise möchten Sie die Pfeiltasten im Listensteuerelement verwenden, um das ausgewählte Element zu ändern.

Überschreiben Sie ProcessDialogKey.

Abfangen einer Navigationstaste und Auslösen eines KeyPress-Ereignisses. Möglicherweise möchten Sie mehrere gedrückte Pfeiltasten in ein Drehfeldsteuerelement aufnehmen, um das Durchlaufen der Elemente zu beschleunigen.

Überschreiben Sie IsInputChar.

Behandlung spezieller Eingaben oder Navigationstasten während eines KeyPress-Ereignisses. Beispiel: Wenn in einem Listensteuerelement die Taste "r" anhaltend gedrückt wird, springt der Benutzer zwischen Elementen, die mit dem Buchstaben "r" beginnen.

Überschreiben Sie ProcessDialogChar.

Behandlung benutzerdefinierter mnemonischer Zeichen, beispielsweise wenn Sie mnemonische Zeichen auf Ownerdrawn-Schaltflächen in einer Symbolleiste behandeln möchten.

Überschreiben Sie ProcessMnemonic.

Siehe auch

Konzepte

Zugreifen auf die Tastatur

Verwenden von Tastaturereignissen

Referenz

My.Computer.Keyboard-Objekt

Keys

WndProc

PreProcessMessage