Ich mache eine Windows-Anwendung (WinForms) und möchte, dass meine Anwendung eine Methode aufruft, wenn der Benutzer F5 drückt - das sollte funktionieren, egal was der Benutzer tut, aber er muss das verwenden Programm - Ich möchte keine globalen Hooks verwenden - irgendwelche Ideen?Hinzufügen eines F5 Hotkeys in C#
Antwort
Wenn Sie nur über ein Formular verfügen, das den Fokus haben kann, können Sie die KeyPreview
-Eigenschaft dieses Formulars auf true
festlegen und das Ereignis KeyPress
behandeln.
Die Eigenschaft KeyPreview
bewirkt, dass das Formular alle Tastendrücke erhält, unabhängig davon, welches Steuerelement im Formular den Eingabefokus hat.
Schauen Sie sich die Form.KeyPreview
Eigenschaft, wird es Ihnen zu stoppen lassen alle KeyDown
, KeyUp
und KeyPress
Ereignisse auf Formularebene, bevor diese durch einzelne Elemente verarbeitet werden.
Dies funktioniert nur im Fall von trivialen Anwendungen, die eine einzige Form und eine der Formen sind Kinder haben immer den Fokus. es ist mehr wie ein Hack, der die meiste Zeit als eine Lösung arbeitet. –
Aufschalten der Form des ProcessCmdKey auf Ihrer Haupt-Form und sucht F5.
protected override bool ProcessCmdKey (ref Message msg, Keys keyData)
{
bool bHandled = false;
// switch case is the easy way, a hash or map would be better,
// but more work to get set up.
switch (keyData)
{
case Keys.F5:
// do whatever
bHandled = true;
break;
}
return bHandled;
}
Vielleicht möchten Sie einen ** Standardfall ** im Switch hinzufügen, damit die Basisklasse sich den Schlüssel ansieht und nicht einfach zurückgibt: 'default: return base.ProcessCmdKey (ref msg, keyData) ; ' –
+1 für den Hinweis auf, dass sie nur für jede Form arbeiten würden legen Sie diese Eigenschaft für und nicht die globale Anwendung –