Проверьте, не нажата ли клавиша Ctrl, используя C # - PullRequest
44 голосов
/ 16 января 2011

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

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

Ответы [ 5 ]

87 голосов
/ 16 января 2011

Используя .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!");
        }
    }
25 голосов
/ 14 января 2015

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

public static bool IsControlDown()
{
    return (Control.ModifierKeys & Keys.Control) == Keys.Control;
}
6 голосов
/ 30 сентября 2018

На самом деле это не ответ на поставленный вопрос, но мне нужно было сделать это в консольном приложении, и детали немного отличались.

Мне пришлось добавить ссылки на WindowsBase иPresentationFramework, и в этот момент я мог бы сделать:

if (System.Windows.Input.Keyboard.Modifiers == ModifierKeys.Control)
   blah

Просто добавив это здесь на тот случай, если кто-то другой делает что-то подобное.

6 голосов
/ 16 января 2011

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

 private void Control_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        if (ModifierKeys == Keys.Control)
            MessageBox.Show("with CTRL");
    }
0 голосов
/ 31 января 2017

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

public static bool IsControlDown()
{
    return (Control.ModifierKeys & Keys.Control) != 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...