Je recherche un meilleur moyen d'implémenter des raccourcis clavier Windows courants (par exemple Ctrl+ F, Ctrl+ N) dans mon application Windows Forms en C #.
L'application a un formulaire principal qui héberge de nombreux formulaires enfants (un à la fois). Lorsqu'un utilisateur frappe Ctrl+ F, j'aimerais afficher un formulaire de recherche personnalisé. Le formulaire de recherche dépendrait du formulaire enfant ouvert actuel dans l'application.
Je pensais utiliser quelque chose comme ça dans l' événement ChildForm_KeyDown :
if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
// Show search form
Mais ça ne marche pas. L'événement ne se déclenche même pas lorsque vous appuyez sur une touche. Quelle est la solution?
c#
winforms
keyboard-shortcuts
Rockcoder
la source
la source
Réponses:
Vous avez probablement oublié de définir la propriété KeyPreview du formulaire sur True. La substitution de la méthode ProcessCmdKey () est la solution générique:
la source
KeyPreview
c'est tout à fait indispensable. Par exemple, lorsque vous appuyez sur un raccourci, vous devez supprimer l'entrée mais néanmoins permettre à unMenuStrip
événement distinct de se déclencher.ProcessCmdKey
Cette approche forcerait la duplication de la logique de déclenchement des événements.Sur votre formulaire principal
KeyPreview
sur TrueAjouter un gestionnaire d'événements KeyDown avec le code suivant
la source
La meilleure façon est d'utiliser des mnémoniques de menu, c'est-à-dire d'avoir des entrées de menu dans votre formulaire principal qui reçoivent le raccourci clavier que vous souhaitez. Ensuite, tout le reste est géré en interne et tout ce que vous avez à faire est d'implémenter l'action appropriée qui est exécutée dans le
Click
gestionnaire d'événements de cette entrée de menu.la source
menu mnemonics
échantillon réel?Vous pouvez même essayer cet exemple:
la source
Si vous avez un menu, changer la
ShortcutKeys
propriété deToolStripMenuItem
devrait faire l'affaire.Sinon, vous pouvez en créer un et définir sa
visible
propriété sur false.la source
A partir du formulaire principal, vous devez:
De plus, je l'ai trouvé sur Google et je voulais le partager avec ceux qui recherchent toujours des réponses. (pour global)
Je pense que vous devez utiliser user32.dll
Pour en savoir plus, consultez http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/
la source
La réponse de Hans pourrait être un peu plus facile pour quelqu'un de nouveau, alors voici ma version.
Vous n'avez pas besoin de vous tromper
KeyPreview
, laissez-le réglé surfalse
. Pour utiliser le code ci-dessous, collez-le juste en dessous de votreform1_load
et exécutez avec F5pour le voir fonctionner:la source
Dans WinForm, nous pouvons toujours obtenir l'état de la clé de contrôle en:
la source