System.Windows.Forms 中的 Keys.Control 和 Keys.ControlKey/Keys.Shift 和 Keys.ShiftKey 之间的确切区别是什么?
我用 google 搜索过,但没有找到任何具体内容,而且 MSDN 上似乎也没有记录。
就我个人而言,我总是使用 Keys.Control/Keys.Shift,因为它工作得很好。
<小时/>编辑:读完 KreepN 的答案后,我想如果你永远不需要使用 Control/Shift,为什么它们在框架中?
我的意思是,它们甚至不是物理按键,所以我不明白微软决定创建它们的原因。
在某些情况下最好使用 Control/Shift 吗?
最佳答案
ControlKey 和 ShiftKey(以及 Menu——您可能会认为它是 名为 AltKey)代表物理键本身。换句话说,他们 是“实际”键,可以在 KeyEventArgs 的 KeyCode 属性中找到 对象。
另一方面,Control、Shift 和 Alt 永远不会出现在 KeyCode 中 属性,但它们的值可以在 KeyData 属性中找到。它似乎 你实际上不需要使用这些常量,因为框架 已经通过 Alt、Control 和 Shift 属性为您拉出它们 KeyEventArgs 对象,但您可以使用它们来测试 KeyData 如果你真的想的话,属性(property)。
编辑您的编辑:
查看按下“a”键时返回的值:
a(未移位)/41/41
A (Shift+a)/41/10041
Ctrl+a/41/20041
本例中所有修饰符的“KeyCode”均为 = 41。如果您只关心按下的主按钮(在本例中为“a”),则可以在代码中使用它。
如果您希望根据是否按下修饰符来获得不同的功能,则需要更具体并引用“KeyData”字段并查找表示特定修饰符的 #。在本例中,“100”表示移位,“200”表示字段开头的控制。
这并不是说您不能只检查 KeyData 字段末尾的“41”,但我从来没有提示过便利性。
可以肯定地说,您在第一个问题中寻找的“差异”是它们引用了不同的属性字段。
编辑其他相关性: 键修饰符值与键值组合直接与 Shortcut 枚举成员相关。例如: Shortcut.CtrlF8 (0x20077) 与 Keys.Control | 相同键.F8(0x20000 | 0x77)
这在处理菜单项的已定义快捷方式属性时非常有用。
关于.net - Keys.Control/Shift 和 Keys.ControlKey/ShiftKey 之间的确切区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502269/