2011-01-16 11 views
32

Ich habe ein Formular, das der Benutzer mit der Maus doppelklicken kann und es wird etwas tun. Nun möchte ich wissen, ob der Benutzer auch die Ctrl-Taste gedrückt hält, während der Benutzer auf das Formular doppelklickt.Testen Sie, ob die Strg-Taste gedrückt ist mit C#

Wie kann ich feststellen, ob der Benutzer die Taste Ctrl gedrückt hält?

+0

http://stackoverflow.com/questions/973721/c-detecting-if-the-shift-key-is-held-when-opening-a-context- Menü Dies ist für die Shift Schlüssel. Aber das Konzept ist das gleiche. – LiamB

+0

IMO, Es ist ein chaotisches Konzept, wenn wir vordefinierte Elemente haben, die uns hier helfen, ohne auf weniger wartbare "magische Zahlen" zurückzugreifen. –

+0

@GrantThomas Ich bin sicher, dass er sich auf die Antworten in diesem Thread bezieht, die genau das bieten, was Sie oben angegeben haben, abgesehen davon, dass es sich um einen anderen Modifier-Schlüssel handelt. – Dan

Antwort

67

.NET 4 Sie etwas so einfach wie verwenden:

private void Control_DoubleClick(object sender, EventArgs e) 
    { 
     if (ModifierKeys.HasFlag(Keys.Control)) 
     { 
      MessageBox.Show("Ctrl is pressed!"); 
     } 
    } 

Wenn Sie nicht .NET 4 verwendet wird, dann wird die Verfügbarkeit von Enum.HasFlag widerrufen, aber das gleiche Ergebnis in früheren Versionen zu erreichen :

private void CustomFormControl_DoubleClick(object sender, EventArgs e) 
    { 
     if ((ModifierKeys & Keys.Control) == Keys.Control) 
     { 
      MessageBox.Show("Ctrl is pressed!"); 
     } 
    } 
+1

Ahhhh .... Ich benutze immer noch Framework 2.0. Vielleicht ist es Zeit zu aktualisieren :) –

+0

Vielleicht, aber wenn das nicht möglich ist, dann sollte mein zweites Beispiel immer noch den Trick machen. –

+0

Enum.HasFlag ist etwa 16 Mal langsamer als die Verwendung der bitweisen Operation. [stackoverflow.com/questions/7368652](http://stackoverflow.com/questions/7368652/what-isit-that-makes-enum-hasflag-so-slow) – NET3

4

auch dies auch

private void Control_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     if (ModifierKeys == Keys.Control) 
      MessageBox.Show("with CTRL"); 
    } 
+0

Perfekt. Vielen Dank. –

17

Nur der Vollständigkeit halber ... ModifierKeys ist eine statische Eigenschaft Control, so können Sie es sogar testen, wenn Sie nicht direkt in einem Event-Handler sind:

public static bool IsControlDown() 
{ 
    return (Control.ModifierKeys & Keys.Control) == Keys.Control; 
} 
0

Das gleiche soneone oben gesagt, aber wie anders als Null zu vergleichen, die ein wenig schneller sein sollte und verwenden weniger Anweisungen auf den meisten Architekturen:

public static bool IsControlDown() 
{ 
    return (Control.ModifierKeys & Keys.Control) != 0; 
} 
Verwandte Themen