使用C#测试Ctrl键是否已关闭

时间:2011-01-16 12:50:12

标签: c# winforms

我有一个表单,用户可以用鼠标双击它,它会做一些事情。现在,我希望能够知道当用户双击表单时用户是否还按住 Ctrl 键。

如何确定用户是否按住 Ctrl 键?

6 个答案:

答案 0 :(得分:86)

使用.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 :(得分:25)

为了完整性... ModifierKeysControl的静态属性,因此即使您不是直接在事件处理程序中,也可以测试它:

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

答案 2 :(得分:6)

即便如此

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

答案 3 :(得分:6)

这并不是对当前问题的真正答案,但是我需要在控制台应用程序中执行此操作,并且细节有所不同。

我必须添加对WindowsBasePresentationFramework的引用,到那时我可以这样做:

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

只要有人在做类似的事情,只需在这里添加即可。

答案 4 :(得分:0)

上面说过的同样的soneone,但比较不同于零,这应该更快一些,并且在大多数架构上使用的指令更少:

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

答案 5 :(得分:0)

这对我有用:

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

并添加对PresentationCore和WindowsBase的引用