2017-04-06 1 views
1

J'essaie d'appeler la fonction avec les boutons gauche et droit du clavier, mais je ne suis pas sûr de savoir comment le faire correctement.Utilisation du bouton du clavier gauche/droit

En résultat de cette tentative, appuyer sur les touches gauche/droite du clavier bascule simplement entre les éléments de l'interface graphique habituelle, et ne fonctionne pas pour des fonctions données. Pas sûr de ce qui ne va pas ici:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Right) 
     { 
      func1(); 
     } 
     else if (e.KeyCode == Keys.Left) 
     { 
      func2(); 
     } 
    } 
+2

Avez-vous activé KeyPreview sur votre formulaire? – Equalsk

+2

Je suppose que c'est parce que vous ne gérez pas les événements. Le point d'arrêt atteint-il pendant le débogage? Je pense que [propriété keyprieview] (https://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview (v = vs.110) .aspx) est ce que vous recherchez. – Reniuz

Répondre

2

Une alternative à l'activation de keypreview comme mentionné dans certains commentaires serait de remplacer la méthode ProcessCmdKey.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Right) 
    { 
     func1(); 
     return true; 
    } 
    else if (keyData == Keys.Left) 
    { 
     func2(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

Veuillez consulter this MSDN article pour plus d'informations.

+0

Cela semble être la bonne réponse. Définir 'KeyPreview' sur' true' n'est pas toujours suffisant, le gestionnaire 'KeyDown' de' Form' ne sera toujours pas appelé si par ex. un 'Button' a le focus. 'ProcessCmdKey' est toujours appelé. –

1

Le code que vous avez fonctionne correctement, vous n'êtes tout simplement pas autorisé à appuyer sur quoi que ce soit à l'avance. Je pense que vous recherchez un raccourci général comme illustré here