Keys.Control / Shift和Keys.ControlKey / ShiftKey之间的确切区别是什么?

时间:2011-09-21 15:16:10

标签: .net winforms keyboard key

在System.Windows.Forms中Keys.Control和Keys.ControlKey / Keys.Shift和Keys.ShiftKey之间的确切区别是什么?

我用谷歌搜索了它,但没有具体的内容,似乎也没有记录在MSDN上。

就个人而言,我总是使用Keys.Control / Keys.Shift,因为它工作正常。


编辑:在阅读了KreepN的回答后,我想如果你永远不必使用Control / Shift,为什么他们在框架中呢?

我的意思是,它们甚至不是物理键,所以我看不出微软决定创建它们的原因。

是否存在使用Control / Shift更好的情况?

1 个答案:

答案 0 :(得分:6)

ControlKey和ShiftKey(以及菜单 - 您可以认为是这样 名为AltKey)代表物理键本身。换句话说,他们 是“实际”键,可以在KeyEventArgs的KeyCode属性中找到 对象

另一方面,

Control,Shift和Alt将永远不会出现在KeyCode中 属性,但它们的值可以在KeyData属性中找到。它似乎 你从来没有真正需要使用这些常量,因为框架 已经通过Alt,Control和Shift属性为您拉出它们 KeyEventArgs对象,但您可以使用它们来测试KeyData 如果你真的想要财产。

Source with Examples

编辑您的修改:

查看按下“a”键时返回的值:

a(未移位)/ 41/41

A(Shift + a)/ 41/10041

Ctrl + a / 41/2004

在这种情况下,“KeyCode”对于所有修饰符都是= 41。你可以在代码中使用它,如果你关心的是按下主按钮,在这种情况下是“a”。

如果您希望根据是否按下修饰符而具有不同的功能,则需要更具体,并引用“KeyData”字段并查找表示某个修饰符的#。在这种情况下,“100”用于换档,“200”用于控制在场地的开始。

这并不是说你不能只检查KeyData字段末尾的“41”,但我从来不会抱怨方便。

可以肯定地说,在你的第一个问题中,你在他们之间寻找的“差异”是他们引用了不同的属性字段。

修改其他相关性: 与键值组合的键修饰符值与快捷键枚举成员直接相关。例如: Shortcut.CtrlF8(0x20077)与Keys.Control |相同Keys.F8(0x20000 | 0x77)

在处理菜单项的已定义快捷方式属性时,这非常有用。