In Windows Forms können Sie dank der Cursors- Klasse jederzeit die aktuelle Position des Cursors ermitteln .
Dasselbe scheint für die Tastatur nicht verfügbar zu sein. Kann man wissen, ob zum Beispiel die ShiftTaste gedrückt wird?
Ist es unbedingt erforderlich, jede Tastaturbenachrichtigung (KeyDown- und KeyUp-Ereignisse) aufzuspüren?
Antworten:
Dies gilt auch, wenn Ctrl+ nicht verfügbar Shiftist. Wenn Sie überprüfen möchten, ob nur die Umschalttaste gedrückt ist,
Wenn Sie sich in einer Klasse befinden, die erbt
Control
(z. B. ein Formular), können Sie das entfernenControl.
quelle
GetKeyState
API-Funktion aufrufen .Keyboard.Modifiers == ModifierKeys.Shift
(für diejenigen, die hier auf einer Suche kamen)(Control.ModifierKeys & Keys.Shift) != 0
man kann verwendenControl.ModifierKeys.HasFlag(Keys.Shift)
Mit dem folgenden Code können fast alle aktuell gedrückten Tasten erkannt werden, nicht nur die ShiftTaste.
quelle
GetKeyState
wäre effizienter. Es macht keinen Sinn, alle Schlüssel zu verfolgen, wenn Windows dies bereits für Sie erledigt.Sie können sich auch Folgendes ansehen, wenn Sie auf System.Windows.Input verweisen
Der Keyboard-Namespace kann auch verwendet werden, um den Status anderer Tasten mit Keyboard.IsKeyDown (Key) zu überprüfen. Wenn Sie ein KeyDownEvent oder ein ähnliches Ereignis abonnieren, enthalten die Ereignisargumente eine Liste der aktuell gedrückten Tasten.
quelle
Die meisten dieser Antworten sind entweder viel zu kompliziert oder scheinen für mich nicht zu funktionieren (z. B. System.Windows.Input scheint nicht zu existieren). Dann habe ich einen Beispielcode gefunden, der gut funktioniert: http://www.switchonthecode.com/tutorials/winforms-accessing-mouse-and-keyboard-state
Für den Fall, dass die Seite in Zukunft verschwindet, veröffentliche ich den entsprechenden Quellcode unten:
quelle
System.Windows.Input
existiert; Für andere, die damit zu kämpfen haben, müssen Sie einen Verweis aufPresentationCore
und einen zusätzlichen Verweis auf hinzufügen ,WindowsBase
um auf dieSystem.Windows.Input.Key
Aufzählung zuzugreifen . Diese Informationen finden Sie immer auf MSDN.static
nicht seinabstract
.Seit .NET Framework Version 3.0 ist es möglich, die
Keyboard.IsKeyDown
Methode aus dem neuenSystem.Windows.Input
Namespace zu verwenden. Zum Beispiel:Obwohl diese Methode Teil von WPF ist, funktioniert sie für WinForm-Anwendungen einwandfrei (vorausgesetzt, Sie fügen Verweise auf PresentationCore.dll und WindowsBase.dll hinzu ). Leider
Keyboard.IsKeyDown
funktionierten die Versionen 3.0 und 3.5 der Methode für WinForm-Anwendungen nicht. Wenn Sie es daher in einer WinForm-Anwendung verwenden möchten, müssen Sie auf .NET Framework 4.0 oder höher abzielen, damit es funktioniert.quelle
Keyboard.IsKeyDown
Methode funktioniert auch in einem WinForm-Projekt.Sie können P / Invoke bis zum Win32 GetAsyncKeyState ausführen , um eine beliebige Taste auf der Tastatur zu testen.
Sie können dieser Funktion Werte aus der Keys-Enumeration (z. B. Keys.Shift) übergeben, sodass nur ein paar Codezeilen erforderlich sind, um sie hinzuzufügen.
quelle
Keyboard
wurde vom Compiler nicht erkannt,GetAsyncKeystate
funktionierte aber in user32 einwandfrei. Vielen Dank!quelle
Der beste Weg, um Tastatureingaben in einem Windows Forms-Formular zu verwalten, besteht darin, sie nach dem Tastendruck und bevor das fokussierte Steuerelement das Ereignis empfängt, zu verarbeiten. Microsoft verwaltet eine integrierte
Form
Level-Eigenschaft namens .KeyPreview , um genau dies zu ermöglichen:Anschließend können die _KeyDown-, _KeyPress- und / oder _KeyUp-Ereignisse des Formulars gemarshallt werden, um auf Eingabeereignisse zuzugreifen, bevor das fokussierte Formularsteuerelement sie jemals sieht, und Sie können die Handlerlogik anwenden, um das Ereignis dort zu erfassen oder es an das fokussierte Formularsteuerelement weiterzuleiten .
Obwohl es strukturell nicht so elegant ist wie die Event-Routing-Architektur von XAML, vereinfacht es die Verwaltung von Funktionen auf Formularebene in Winforms erheblich. Weitere Informationen finden Sie in den MSDN-Hinweisen zu KeyPreview .
quelle
funktioniert für ein Textfeld, wenn sich der obige Code im Keydown-Ereignis des Formulars befindet und kein anderes Steuerelement das Keydown-Ereignis für den Schlüssel nach unten erfasst.
Man kann auch wünschen, die weitere Schlüsselverarbeitung zu stoppen mit:
quelle
Die x / y-Position des Cursors ist eine Eigenschaft, und ein Tastendruck (wie ein Mausklick / eine Mausbewegung) ist ein Ereignis. Die beste Vorgehensweise besteht normalerweise darin, die Schnittstelle ereignisgesteuert zu lassen. Das einzige Mal, dass Sie das oben Genannte benötigen, ist, wenn Sie versuchen, eine Schicht + Mausklick-Sache zu machen.
quelle
In WinForms:
Es klingt so, als ob ein Duplikat der Stapelüberlauf-Frage " Umschalttaste erkennen" gedrückt wird, ohne Ereignisse in Windows Forms zu verwenden. .
quelle