Подтвердить что ты не робот

Проверьте, не нажата ли клавиша Ctrl с помощью С#

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

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

4b9b3361

Ответ 1

Используя .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!");
        }
    }

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Это работает для меня:

 if(Keyboard.IsKeyDown(Key.LeftCtrl))
    {}

И добавьте ссылки на PresentationCore и WindowsBase