Übersicht über die Verwendung der Tastatur (Windows Forms .NET)

In Windows Forms werden Benutzereingaben in Form von Windows-Meldungen an Anwendungen gesendet. Eine Reihe überschreibbarer Methoden verarbeitet diese Meldungen auf Anwendungs-, Formular- und Steuerelementebene. Wenn diese Methoden tastaturbezogene Meldungen empfangen, lösen sie Ereignisse aus, die verarbeitet werden können, um Informationen über die Tastatureingabe zu erhalten. Oftmals können Windows Forms-Anwendungen sämtliche Benutzereingaben verarbeiten, indem einfach diese Ereignisse verarbeitet werden. In anderen Fällen kann eine Anwendung eine der Methoden überschreiben, die Nachrichten verarbeiten, um eine bestimmte Nachricht abzufangen, bevor diese von der Anwendung, dem Formular oder dem Steuerelement empfangen wird.

Wichtig

Der Desktopleitfaden zu .NET 7 und .NET 6 ist in Bearbeitung.

Tastaturereignisse

Alle Windows Forms-Steuerelemente erben verschiedene Ereignisse, die mit Maus- und Tastatureingaben zu tun haben. Ein Steuerelement kann beispielsweise das KeyPress-Ereignis verarbeiten, um den Zeichencode einer Taste zu bestimmen, die gedrückt wurde. Weitere Information finden Sie unter Verwenden von Tastaturereignissen.

Methoden zum Verarbeiten von Benutzereingabemeldungen

Formulare und Steuerelemente haben Zugriff auf die Schnittstelle IMessageFilter und mehrere überschreibbare Methoden, die Windows-Meldungen an verschiedenen Stellen der Nachrichtenwarteschlange verarbeiten. Diese Methoden verfügen alle über einen Message-Parameter, der die genauen Details von Windows-Meldungen kapselt. Sie können diese Methoden implementieren oder überschreiben, um die Nachricht zu untersuchen und anschließend zu verarbeiten oder an den nächsten Consumer in der Nachrichtenwarteschlange zu übergeben. In der folgenden Tabelle werden die Methoden vorgestellt, die die Windows-Meldungen in Windows Forms verarbeiten.

Methode Hinweise
PreFilterMessage Diese Methode fängt in die Warteschlange eingereihte (veröffentlichte) Windows-Nachrichten auf Anwendungsebene ab.
PreProcessMessage Diese Methode fängt Windows-Meldungen auf Formular- und Steuerelementebene ab, bevor diese verarbeitet werden.
WndProc Diese Methode verarbeitet Windows-Meldungen auf Formular- und Steuerelementebene.
DefWndProc Diese Methode führt die Standardverarbeitung von Windows-Meldungen auf Formular- und Steuerelementebene aus. Hierdurch wird die minimale Funktionalität eines Fensters gewährleistet.
OnNotifyMessage Diese Methode fängt Nachrichten auf Formular- und Steuerelementebene ab, nachdem diese verarbeitet wurden. Das Stilbit EnableNotifyMessage muss festgelegt werden, damit diese Methode aufgerufen wird.

Tastatur- und Mausmeldungen werden auch durch zusätzliche überschreibbare Methoden verarbeitet, die für diese Meldungstypen spezifisch sind. Weitere Informationen finden Sie im Abschnitt Vorverarbeiten von Tasten. .

Schlüsseltypen

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.

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 Vererbung (C#-Programmierleitfaden) oder Vererbung (Visual Basic).

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