2011-01-16 2 views
32

У меня есть форма, которую пользователь может дважды щелкнуть мышью, и она что-то сделает. Теперь я хочу знать, имеет ли пользователь также удерживая клавишу Ctrl, так как пользователь дважды кликнет на форму.Проверьте, не нажата ли клавиша Ctrl с помощью C#

Как узнать, удерживает ли пользователь Ctrl?

+0

http://stackoverflow.com/questions/973721/c-detecting-if-the-shift-key-is-held-when-opening-a-context- меню Это для Shift ключ. Но концепция такая же. – LiamB

+0

IMO, Это грязная концепция, когда у нас есть предопределенные элементы, чтобы помочь нам здесь, не прибегая к менее «поддерживающим» магическим числам. –

+0

@GrantThomas Я уверен, что он имел в виду ответы в этом потоке, которые обеспечивают именно то, что вы предоставили выше, помимо того, что он является другим ключом-модификатором. – Dan

ответ

67

Использование .NET 4 вы можете использовать что-то же просто, как:

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

Если вы не используете .NET 4, то наличие Enum.HasFlag аннулирован, но для достижения такого же результата в предыдущих версиях :

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

Ahhhh .... Я все еще использую framework 2.0. Может быть, пришло время обновить :) –

+0

Может быть, но если это невозможно, то мой второй пример все же должен сделать трюк. –

+0

Enum.HasFlag примерно в 16 раз медленнее, чем использование побитовой операции. [stackoverflow.com/questions/7368652](http://stackoverflow.com/questions/7368652/what-is-it-that-makes-enum-hasflag-so-slow) – NET3

4

Даже это также

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

Отлично. Благодарю. –

17

Только для полноты ... ModifierKeys статическое свойство Control, так что вы можете проверить это, даже если вы не непосредственно в обработчике события:

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

сказанное выше То же soneone, но сравнение, как отличается от нуля, которая должна быть немного быстрее и использовать меньше инструкции на большинстве архитектур:

public static bool IsControlDown() 
{ 
    return (Control.ModifierKeys & Keys.Control) != 0; 
} 
Смежные вопросы