我有一个表单,用户可以用鼠标双击它,它会做一些事情。现在,我希望能够知道当用户双击表单时用户是否还按住 Ctrl 键。
如何确定用户是否按住 Ctrl 键?
答案 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)
为了完整性... ModifierKeys
是Control
的静态属性,因此即使您不是直接在事件处理程序中,也可以测试它:
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)
这并不是对当前问题的真正答案,但是我需要在控制台应用程序中执行此操作,并且细节有所不同。
我必须添加对WindowsBase
和PresentationFramework
的引用,到那时我可以这样做:
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的引用