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

标签 .net winforms keyboard key

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)。

Source with Examples .

编辑您的编辑:

查看按下“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/

相关文章:

c# - WPF FocusNavigationDirection、MoveFocus 和箭头键

C# - 列表排序 - x 和 y

mysql - 发生无效操作异常

.net - 如何从字符串中删除加速符?

java - 将键盘事件从 java 发送到任何应用程序(屏幕键盘)

ios - 使用侧边菜单关闭键盘 MMDrawerController

.net - 匹配任何垂直空格的正则表达式

c# - 如何在运行时替换方法实现?

.net - Wpf - 以主桌面为中心

c# - 如何访问 UI Spy 看不到的元素以使用 C# 自动化 win32 应用程序