What’s the exact difference between Keys.Control/Shift and Keys.ControlKey/ShiftKey?
System.Windows.Forms 中的 Keys.Control 和 Keys.ControlKey/Keys.Shift 和 Keys.ShiftKey 之间的确切区别是什么?
我在谷歌上搜索过,但没有找到任何具体内容,而且 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
如果你真的想的话。
源代码示例。
编辑您的编辑:
查看按下 “a” 键时返回的值:
a (未移位) / 41 / 41
A (Shift a) / 41 / 10041
Ctrl a / 41 / 20041
在这种情况下,对于所有修饰符,”KeyCode” 为 = 41。如果您只关心按下的主按钮,您可以在代码中使用它,在本例中为”a”。
如果您想根据是否按下修饰符来获得不同的功能,您需要更具体并引用”KeyData”字段并查找表示某个修饰符的#。在这种情况下,”100″表示移位,”200″表示字段开头的控制。
这并不是说您不能只检查 KeyData 字段末尾的”41″,但我从来没有抱怨过方便。
可以肯定地说,您在第一个问题中寻找它们之间的”差异”是它们引用了不同的属性字段。
编辑以获得更多相关性:
与键值组合的键修饰符值与快捷方式枚举成员直接相关。例如:
Shortcut.CtrlF8 (0x20077) 与 Keys.Control | 相同Keys.F8 ( 0x20000 | 0x77 )
这在处理菜单项的已定义快捷方式属性时很有用。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/269774.html