在System.Windows.Forms中Keys.Control和Keys.ControlKey / Keys.Shift和Keys.ShiftKey之间的确切区别是什么?
我用谷歌搜索了它,但没有具体的内容,似乎也没有记录在MSDN上。
就个人而言,我总是使用Keys.Control / Keys.Shift,因为它工作正常。
编辑:在阅读了KreepN的回答后,我想如果你永远不必使用Control / Shift,为什么他们在框架中呢?
我的意思是,它们甚至不是物理键,所以我看不出微软决定创建它们的原因。
是否存在使用Control / Shift更好的情况?
答案 0 :(得分:6)
ControlKey和ShiftKey(以及菜单 - 您可以认为是这样 名为AltKey)代表物理键本身。换句话说,他们 是“实际”键,可以在KeyEventArgs的KeyCode属性中找到 对象
另一方面,Control,Shift和Alt将永远不会出现在KeyCode中 属性,但它们的值可以在KeyData属性中找到。它似乎 你从来没有真正需要使用这些常量,因为框架 已经通过Alt,Control和Shift属性为您拉出它们 KeyEventArgs对象,但您可以使用它们来测试KeyData 如果你真的想要财产。
编辑您的修改:
查看按下“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)
在处理菜单项的已定义快捷方式属性时,这非常有用。