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

Ita*_*y.B 47 c# winforms

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

如何判断用户是否按住了Ctrl键?

Gra*_*mas 91

使用.NET 4,您可以使用以下简单的内容:

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

如果您不使用.NET 4,则Enum.HasFlag撤销可用性,但要在以前的版本中获得相同的结果:

    private void CustomFormControl_DoubleClick(object sender, EventArgs e)
    {
        if ((ModifierKeys & Keys.Control) == Keys.Control)
        {
            MessageBox.Show("Ctrl is pressed!");
        }
    }
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 26

只是为了完整性... ModifierKeys是一个静态属性Control,所以即使你没有直接在事件处理程序中,你也可以测试它:

public static bool IsControlDown()
{
    return (Control.ModifierKeys & Keys.Control) == Keys.Control;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您尝试在不直接驻留在表单中的代码中执行此检查,这是需要注意的*非常*重要的一点。 (2认同)

Jav*_*ram 7

即便如此

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


Chr*_*Rae 7

这不是对手头问题的真正答案,但我需要在控制台应用程序中执行此操作,细节稍有不同.

我必须添加对WindowsBase和的引用PresentationFramework,并且在那时我可以做:

if (System.Windows.Input.Keyboard.Modifiers == ModifierKeys.Control)
   blah
Run Code Online (Sandbox Code Playgroud)

只是在这里添加这个,以防其他人正在做类似的事情.