Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In Windows Forms werden Benutzereingaben in Form von Windows-Nachrichtenan Anwendungen gesendet. Eine Reihe überschreibbarer Methoden verarbeitet diese Meldungen auf Anwendungs-, Formular- und Steuerelementebene. Wenn diese Methoden Tastaturnachrichten empfangen, lösen sie Ereignisse aus, die behandelt werden können, um Informationen über die Tastatureingabe zu erhalten. In vielen Fällen können Windows Forms-Anwendungen alle Benutzereingaben einfach verarbeiten, indem diese Ereignisse behandelt werden. In anderen Fällen muss eine Anwendung möglicherweise eine der Methoden überschreiben, mit denen Nachrichten verarbeitet werden, um eine bestimmte Nachricht abzufangen, bevor sie von der Anwendung, dem Formular oder dem Steuerelement empfangen wird.
Tastaturereignisse
Alle Windows Forms-Steuerelemente erben verschiedene Ereignisse, die sich auf Maus- und Tastatureingaben beziehen. Beispielsweise kann ein Steuerelement das KeyPress-Ereignis behandeln, 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 Meldungswarteschlange verarbeiten. Diese Methoden verfügen alle über einen Message-Parameter, der die Details von Windows-Nachrichten auf niedriger Ebene kapselt. Sie können diese Methoden implementieren oder überschreiben, um die Meldung zu untersuchen und anschließend zu verarbeiten oder an den nächsten Consumer in der Meldungswarteschlange zu übergeben. In der folgenden Tabelle sind die Methoden aufgeführt, mit denen alle Windows-Nachrichten in Windows Forms verarbeitet werden.
Methode | Hinweise |
---|---|
PreFilterMessage | Diese Methode fängt in die Warteschlange eingereihte (veröffentlichte) Windows-Meldungen auf Anwendungsebene ab. |
PreProcessMessage | Diese Methode fängt Windows-Nachrichten auf der Ebene von Formularen und Steuerelementen ab, bevor sie verarbeitet werden. |
WndProc | Diese Methode verarbeitet Windows-Nachrichten auf Formular- und Steuerungsebene. |
DefWndProc | Diese Methode führt die Standardverarbeitung von Windows-Meldungen auf Formular- und Steuerelementebene aus. Dies bietet die minimale Funktionalität eines Fensters. |
OnNotifyMessage | Diese Methode fängt Meldungen auf Formular- und Steuerelementebene ab, nachdem diese verarbeitet wurden. Das Stilbit EnableNotifyMessage muss festgelegt werden, damit diese Methode aufgerufen wird. |
Tastatur- und Mausnachrichten werden durch einen zusätzlichen Satz überschreibbarer Methoden verarbeitet, die für diese Nachrichtentypen 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 die WM_KEYDOWN und WM_SYSKEYDOWN Windows-Nachrichten begleiten. 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, das von der Visual Basic-Programmierschnittstelle bereitgestellt wird, verwenden, um herauszufinden, welche Tasten gedrückt wurden und Tasten zu senden. Weitere Informationen finden Sie unter Zugreifen auf die Tastatur (Visual Basic).
Reihenfolge der Tastaturereignisse
Wie bereits erwähnt, gibt es drei tastaturbezogene Ereignisse, die in einem Steuerelement auftreten können. Die folgende Sequenz zeigt die allgemeine Reihenfolge der Ereignisse:
- Der Benutzer drückt die A-Taste , der Schlüssel wird vorverarbeitet, verteilt und ein KeyDown Ereignis tritt auf.
- Der Benutzer hält den A-Schlüssel , der Schlüssel wird vorverarbeitet, verteilt und ein KeyPress Ereignis tritt auf. Dieses Ereignis tritt mehrmals auf, wenn der Benutzer einen Schlüssel hält.
- Der Benutzer gibt den A-Schlüssel frei, der Schlüssel wird vorverarbeitet, verteilt und ein KeyUp Ereignis tritt auf.
Vorverarbeiten von Tasten
Tastaturmeldungen werden wie andere Meldungen in der Methode WndProc eines Formulars oder Steuerelements verarbeitet. Bevor Tastaturnachrichten verarbeitet werden, ruft die PreProcessMessage-Methode jedoch eine oder mehrere Methoden auf, die überschrieben werden können, um Sonderzeichen und physische Tasten zu verarbeiten. Sie können diese Methoden außer Kraft setzen, um bestimmte Schlüssel zu erkennen und zu filtern, bevor das Steuerelement die Nachrichten verarbeitet. Die folgende Tabelle zeigt die Aktion, die ausgeführt wird, und die zugehörige Methode, die auftritt, in der Reihenfolge, in der die Methode auftritt.
Vorverarbeiten eines KeyDown-Ereignisses
Maßnahme | Verwandte 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 vor regulären Tasten hat. Wenn diese Methode zurückgegeben wird true , wird die Schlüsselmeldung nicht verteilt, und ein Schlüsselereignis tritt nicht 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. |
Suchen Sie nach einer Navigationstaste (ESC, TAB, Return-Taste oder Pfeiltasten). | 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 das unmittelbare Steuerelement den Schlüssel nicht behandelt, wird das ProcessDialogKey im übergeordneten Steuerelement aufgerufen und so weiter, bis hin zum obersten Steuerelement in der Hierarchie. Wenn diese Methode zurückgegeben wird true , ist die Vorverarbeitung abgeschlossen, und ein Schlüsselereignis wird nicht generiert. Wenn false zurückgegeben wird, tritt ein KeyDown-Ereignis auf. |
Vorverarbeiten eines KeyPress-Ereignisses
Maßnahme | Verwandte Methode | Hinweise |
---|---|---|
Überprüfen, ob der Schlüssel ein normales Zeichen ist, das vom Steuerelement verarbeitet werden soll | IsInputChar | Wenn es sich bei dem Zeichen um ein normales Zeichen handelt, gibt diese Methode true zurück, das KeyPress-Ereignis wird ausgelöst und es tritt keine weitere Vorverarbeitung auf. Andernfalls wird ProcessDialogChar aufgerufen. |
Überprüfen Sie, ob dieses Zeichen ein mnemonisches Zeichen ist (z. B. &OK auf einer Schaltfläche) | ProcessDialogChar | Die Steuerelementhierarchie wird ähnlich wie bei ProcessDialogKey aufgerufen. Wenn es sich bei dem Steuerelement um ein Containersteuerelement handelt, sucht es nach mnemonischen Zeichen, indem es ProcessMnemonic für sich und seine untergeordneten Steuerelemente aufruft. Wenn ProcessDialogChartrue zurückgibt, tritt KeyPress kein Ereignis auf. |
Verarbeiten von Tastaturnachrichten
Nachdem Tastaturnachrichten die WndProc Methode eines Formulars oder Steuerelements erreicht haben, werden sie von einer Reihe von Methoden verarbeitet, die überschrieben werden können. Jede dieser Methoden gibt einen Boolean Wert zurück, der angibt, ob die Tastaturnachricht verarbeitet und vom Steuerelement genutzt wurde. Wenn eine der Methoden zurückgegeben true
wird, wird die Nachricht als behandelt betrachtet und nicht zur weiteren Verarbeitung an die Basis oder das übergeordnete Element des Steuerelements übergeben. Andernfalls verbleibt die Nachricht in der Nachrichtenwarteschlange und kann in einer anderen Methode in der Basis oder dem übergeordneten Element des Steuerelements verarbeitet werden. Die folgende Tabelle enthält die Methoden zum Verarbeiten von Tastaturmeldungen.
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 Schlüsselereignis generiert, andernfalls wird ProcessKeyEventArgs aufgerufen. |
ProcessKeyEventArgs | Diese Methode löst je nach Anforderung die Ereignisse KeyDown, KeyPress und KeyUp auf. |
Überschreiben von Tastaturmethoden
Es gibt viele Methoden zum Überschreiben, wenn eine Tastaturnachricht vorverarbeitet und verarbeitet wird. Einige Methoden sind jedoch bessere Wahlmöglichkeiten als andere. Die folgende Tabelle enthält Aufgaben, die Sie möglicherweise ausführen möchten, und die beste Möglichkeit, die Tastaturmethoden außer Kraft zu setzen. 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. Sie möchten z. B. die TAB-TASTE und die EINGABETASTE in einem Textfeld behandeln. | Überschreiben Sie IsInputKey. Alternativ können Sie das PreviewKeyDown-Ereignis behandeln und IsInputKey des PreviewKeyDownEventArgs auf true für die gewünschten Schlüssel oder Tasten festlegen. |
Nehmen Sie bei einem Steuerelement eine besondere Eingabe oder Navigationsbehandlung vor. Sie möchten z. B. die Verwendung von Pfeiltasten in Ihrem Listensteuerelement verwenden, um das ausgewählte Element zu ä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. Beispielsweise kann in einem Listensteuerelement durch Gedrückthalten der R-TASTE zwischen Elementen gesprungen werden, die mit dem Buchstaben r 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
.NET Desktop feedback