Ich suche nach einer besten Möglichkeit, gängige Windows-Tastaturkürzel (z. B. Ctrl+ F, Ctrl+ N) in meiner Windows Forms- Anwendung in C # zu implementieren .
Die Anwendung verfügt über ein Hauptformular, in dem viele untergeordnete Formulare (nacheinander) gehostet werden. Wenn ein Benutzer Ctrl+ Fdrückt, möchte ich ein benutzerdefiniertes Suchformular anzeigen. Das Suchformular hängt vom aktuell geöffneten untergeordneten Formular in der Anwendung ab.
Ich habe darüber nachgedacht, so etwas im ChildForm_KeyDown- Ereignis zu verwenden:
if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
// Show search form
Das funktioniert aber nicht. Das Ereignis wird nicht einmal ausgelöst, wenn Sie eine Taste drücken. Was ist die Lösung?
c#
winforms
keyboard-shortcuts
Rockcoder
quelle
quelle
Antworten:
Sie haben wahrscheinlich vergessen, die KeyPreview- Eigenschaft des Formulars auf True zu setzen. Das Überschreiben der ProcessCmdKey () -Methode ist die generische Lösung:
quelle
KeyPreview
ist dies unverzichtbar. Wenn Sie beispielsweise eine Verknüpfung drücken, müssen Sie die Eingabe unterdrücken, aber dennoch ein separatesMenuStrip
Ereignis auslösen.ProcessCmdKey
Ansatz würde die Verdoppelung der Ereignisauslöselogik erzwingen.Auf Ihrem Hauptformular
KeyPreview
True setzenFügen Sie den KeyDown-Ereignishandler mit dem folgenden Code hinzu
quelle
Der beste Weg ist, Menü-Mnemonik zu verwenden, dh Menüeinträge in Ihrem Hauptformular zu haben, denen die gewünschte Tastenkombination zugewiesen wird. Dann wird alles andere intern erledigt und Sie müssen lediglich die entsprechende Aktion implementieren, die im
Click
Ereignishandler dieses Menüeintrags ausgeführt wird.quelle
menu mnemonics
echte Probe?Sie können sogar dieses Beispiel ausprobieren:
quelle
Wenn Sie ein Menü haben, sollte das Ändern der
ShortcutKeys
Eigenschaft vonToolStripMenuItem
den Trick machen.Wenn nicht, können Sie eine erstellen und ihre
visible
Eigenschaft auf false setzen.quelle
Aus dem Hauptformular müssen Sie:
Außerdem habe ich dies bei Google gefunden und wollte es an diejenigen weitergeben, die noch nach Antworten suchen. (für global)
Ich denke, Sie müssen user32.dll verwenden
Lesen Sie weiter http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/
quelle
Hans 'Antwort könnte für jemanden, der neu in diesem Bereich ist, etwas einfacher sein. Hier ist meine Version.
Sie müssen sich nicht täuschen
KeyPreview
, lassen Sie es auf eingestelltfalse
. Um den folgenden Code zu verwenden, fügen Sie ihn einfach unter Ihren Code einform1_load
und führen F5Sie ihn aus, damit er funktioniert:quelle
In WinForm können wir den Status des Steuerschlüssels immer erhalten, indem wir:
quelle