2009-05-03 5 views
3

Je suis nouveau ici et j'ai un petit problème avec une application C#. Je souhaite capturer l'événement de touche enfoncée. Ce n'était pas un problème au début, mais après avoir ajouté quelques boutons au formulaire, l'événement key down du formulaire ignore les touches fléchées et déplace le focus d'un bouton à l'autre. (L'événement key up fonctionne) Y at-il un façon d'arrêter cela et de les faire faire quelque chose d'autre quand je tiens les touches fléchées?Evénement de touche affectée par des boutons

+0

Vérifiez les modifications ci-dessous. –

Répondre

5

Définissez la propriété KeyPreview sur le formulaire à true. Cela permettra au formulaire de voir l'événement keydown en plus des contrôles enfants.

Ajoutez ceci à votre formulaire ...

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData.Equals(Keys.Right)) 
    { 
     MessageBox.Show("Right Key Pressed!"); 
    } 

    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

J'ai eu le KeyPreview réglé sur vrai, mais toujours pas de réponse lorsque les touches fléchées sont enfoncées. Toutes les autres clés semblent fonctionner dans l'événement KeyDown à l'exception des flèches. – sheitan

+0

Les événements Form Key * * normaux ne capturent pas les clés de contrôle. Vous devez remplacer ProcessCmdKey à la place. –

+0

Merci beaucoup. Cela m'a beaucoup aidé! :) – sheitan

1

Si vous ne voulez pas la clé normale vers le bas pour les contrôles des fonctionnalités dont vous aurez besoin pour définir l'événement vers le bas la touche de chaque commande, et régler la manipulé l'attribut pour que les arguments d'événement soient vrais, de cette façon il ne gonfle pas jusqu'à la fonctionnalité de contrôle intégrée.