2010-09-13 6 views
15

J'attrape un événement MouseDown sur un contrôle, ce qui me donne un objet MouseEventArgs dans la signature. Maintenant, je veux être en mesure de dire si l'utilisateur maintenait la touche "Shift" ou "Control" quand ils ont cliqué. Mais l'objet MouseEventArgs ne contient aucune information sur le clavier!Comment savoir si Shift est enfoncé dans un événement MouseDown?

Quelle est la meilleure façon de dire si le clavier touches Maj/Ctrl étaient détenus au moment du clic?

Répondre

29

Utilisez la propriété Controls.ModifierKeys pour voir ce qui est pressé. Par exemple:

private void Form1_MouseClick(object sender, MouseEventArgs e) { 
     if (Control.ModifierKeys == Keys.Control) { 
      Console.WriteLine("Ctrl+Click"); 
     } 
    } 

D'autres modificateurs sont Keys.Alt et Keys.Shift. Trouvez des combinaisons avec, disons, (Keys.Control | Keys.Shift).

+4

Puisqu'il s'agit d'une énumération de bits au niveau du bit (c'est-à-dire plusieurs valeurs à la fois), vous pourriez souhaiter 'Control.ModifierKeys.HasFlag (Keys.Control)' - cela donnera 'true' si vous appuyez sur _CTRL + _. – drzaus

+0

Pas si conseillé, l'utilisateur s'attend à ce que quelque chose d'autre se produise lorsqu'il utilise, disons, Ctrl + Maj + Clic. –

+0

D'où le _ "pourrait" _ dans mon commentaire;) J'ai raté le fond de votre réponse, cependant, re: "trouver des combinaisons avec ..." – drzaus

Questions connexes