2017-01-26 1 views
1

Je crois qu'une question semblable à ceci a été posée avant mais aucune des solutions n'ont fonctionné pour moi. J'ai du code qui doit être exécuté lorsque le bouton CTRL et le bouton "+" sont tous deux enfoncés. Je me suis assuré de mettre le champ KeyPreview à true sur le forum parent. J'ai essayé de mettre les gestionnaires d'événements suivants dans la classe du contrôle mais aucun n'a travaillé pour moi jusqu'à présent. Lorsque j'appuie sur une touche, l'événement n'est pas pris:Événement Clé en bas sur le contrôle WinForms Ne pas tirer

private void PreviewControl_OnKeyDown(object sender, KeyEventArgs e){} 
protected override OnKeyDown(KeyEventArgs e){} 
protected override bool ProcessCmdKey(ref Message msg, Keys keyData){} 
+1

Votre contrôle ne recevra l'événement clé que s'il contient le focus. Si vous voulez intercepter une touche de raccourci en utilisant votre contrôle utilisateur sans avoir le focus, vous pouvez utiliser [cette astuce] (http://stackoverflow.com/a/38983624/3110834). –

+1

Si votre contrôle est quelque chose comme un 'PictureBox' et que vous voulez le rendre sélectionnable et ensuite vouloir gérer les événements clés, faites-le selectable comme [this (Preferred)] (http://stackoverflow.com/a/38982186/3110834) ou [ceci] (http://stackoverflow.com/a/37792846/3110834). –

+0

J'ai essayé d'implémenter le (préféré) mais j'ai toujours le même problème avec lui. Je dois faire quelque chose de complètement faux mais je n'arrive pas à comprendre ce que c'est. – user2481095

Répondre

0

donc je l'ai eu à travailler avec l'aide de @Reza Aghaei. J'ai utilisé this(Preferred). Reza avait raison, le contrôle n'obtenait pas le focus, donc j'avais besoin d'ajouter ce code pour donner le focus au contrôle quand on clique dessus. Cependant, je n'ai pas pu utiliser le gestionnaire d'événement OnKeyDown. Au lieu de cela, j'ai dû utiliser le ProcessCmdKey (ref Message msg, Keys keyData) {} dans la classe de contrôle pour qu'il attrape l'événement key.