2010-09-13 20 views
15

Sto rilevando un evento MouseDown su un controllo, che mi dà un oggetto MouseEventArgs nella firma. Ora voglio essere in grado di dire se l'utente stava tenendo premuto il tasto "Shift" o "Control" quando hanno cliccato. Ma l'oggetto MouseEventArgs non contiene alcuna informazione sulla tastiera!Come sapere se Shift viene premuto in un evento MouseDown?

Qual è il modo più semplice di dire se la tastiera Maiusc/Ctrl chiavi erano detenuti al momento del click?

risposta

29

Utilizzare la proprietà Controls.ModifierKeys per vedere cosa c'è premuto. Per esempio:

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

Altri modificatori sono Keys.Alt e Keys.Shift. Trova combinazioni con, diciamo, (Keys.Control | Keys.Shift).

+4

Poiché si tratta di un enumeratore bit per bit (ad esempio può essere più valori contemporaneamente), è possibile che si desideri 'Control.ModifierKeys.HasFlag (Keys.Control)' - questo fornirà 'true' se _CTRL + _ viene premuto. – drzaus

+0

Non così consigliabile, l'utente si aspetta che accada qualcos'altro quando usa, per esempio, Ctrl + Maiusc + clic. –

+0

Quindi il _ "potrebbe" _ nel mio commento;) Ho perso la parte inferiore della risposta, tuttavia, re: "trova combinazioni con ..." – drzaus

Problemi correlati