KeyEventArgs.KeyData,KeyEventArgs.KeyCode和KeyEventArgs.KeyValue 这些是与键盘事件相关的属性。KeyData表示按下的键及其修饰符(如Shift、Ctrl等),KeyCode表示按下的键的代码,而KeyValue则表示按下的键的值。

11

我对KeyEventArgsKeyCodeKeyDataKeyValue有疑问。

KeyCodeKeydata都是Keys类型,但我不知道它们之间有什么区别。至于KeyValue,我不知道它是什么——它是一个int类型,它返回按下的键的char值吗?

我没有太多关于按键事件方面的经验;任何关于它们如何运作以及如何使用它们的解释将不胜感激。

1个回答

19

KeyCode 包含产生 KeyUpKeyDown 事件的按键数据。而 KeyData 则包含该按键加上 CTRL、SHIFT 或 ALT 等修饰键的组合,如果这些键中有任何一个被按下,则会包含在内。

例如:

  • 按下(并保持)CTRL。会引发 KeyDown 事件,KeyCode 的值为 Keys.ControlKey,而 KeyData 的值为 Keys.ControlKey | Keys.Control
  • 仍然按住 CTRL 键,再按下 SHIFT。会引发 KeyDown 事件,KeyCode 的值为 Keys.ShiftKey,而 KeyData 的值为 Keys.ShifKey | Keys.Shift | Keys.Control

注意,KeyDataKeyCode 可以包含枚举类型 Keys 中的任何值(例如 Keys.AKeys.NumPad4Keys.Up)。当其中一个修饰键被按下时,它将由 KeyData 中的两个值来表示(一个为按键,另一个为修饰键的值)。而修饰键也可以通过 Modifiers 属性来获取。

KeyValue 将返回表示按键的数字值,本质上是代表 KeyCode 中找到的值的整数。


那么关键数据只能是CTRL、ALT或SHIFT键吗?那KeyValue呢? - Bosak
当我按下Shift键时,KeyCode只能是Keys.ShiftKey,而不会是Keys.Shif吗? 哦,还有,Keys是从0到MaxKeys枚举的,还是像ASCI表中的A-65那样枚举的? - Bosak
1
@Bosak:没错。但请注意,无论您输入大写字母还是小写字母,按下'A'键始终会给出65。请记住,这些值代表的是键,而不是它们所产生的字母。 - Fredrik Mörk
如果我需要检查字母,我需要检查修改键或按键数据是否为Shift键 :) 非常感谢你的帮助! - Bosak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接