2010-09-13 17 views
15

Estoy capturando un evento MouseDown en un control, que me da un objeto MouseEventArgs en la firma. Ahora quiero poder decir si el usuario estaba presionando la tecla "Shift" o "Control" cuando hicieron clic. ¡Pero el objeto MouseEventArgs no contiene información del teclado!¿Cómo saber si se presiona Shift en un evento MouseDown?

¿Cuál es la forma más fácil de saber si el teclado Shift/Ctrl llaves estaban retenidos en el momento del clic?

Respuesta

29

Utilice la propiedad Controls.ModifierKeys para ver lo que está presionado. Por ejemplo:

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

Otros modificadores son Keys.Alt y Keys.Shift. Encuentre combinaciones con, por ejemplo, (Keys.Control | Keys.Shift).

+4

Dado que es una enumeración de bandera bit a bit (es decir, puede tener varios valores a la vez), es posible que desee 'Control.ModifierKeys.HasFlag (Keys.Control)'; esto proporcionará 'true' si se presiona _CTRL + _. – drzaus

+0

No tan aconsejable, el usuario esperará que suceda algo más cuando usa, por ejemplo, Ctrl + Shift + Click. –

+0

De ahí el _ "poder" _ en mi comentario;) Me perdí la parte inferior de su respuesta, re: "encontrar combinaciones con ..." – drzaus

Cuestiones relacionadas