这场比赛的KeyDown场和KeyPress场有什么不同.网

推荐答案

关于这一点,显然有a lot种误解!

KeyDownKeyPress之间唯一的实际区别是,KeyPress传递由按键产生的字符,并且只有在存在一个字符时才会被调用.

换句话说,如果你在键盘上按A,你将得到以下事件序列:

  1. KeyDown:KeyCode=Keys.A、 KeyData=密钥.A、 修饰符=键.没有一个
  2. KeyPress:KeyChar=‘a’
  3. KeyUp:KeyCode=Keys.A.

但如果按Shift键+A键,您将得到:

  1. KeyDown:KeyCode=Keys.ShiftKey,KeyData=Keys.ShiftKey,Shift,修改器=Keys.Shift
  2. KeyDown:KeyCode=Keys.A、 KeyData=密钥.A | keys .Shift,修饰符=关键点.转移
  3. KeyPress:KeyChar=‘A’
  4. KeyUp:KeyCode=Keys.A.
  5. KeyUp:KeyCode=Keys.ShiftKey

如果您按住这些键一段时间,您将得到类似于:

  1. KeyDown:KeyCode=Keys.ShiftKey,KeyData=Keys.ShiftKey,Shift,修改器=Keys.Shift
  2. KeyDown:KeyCode=Keys.ShiftKey,KeyData=Keys.ShiftKey,Shift,修改器=Keys.Shift
  3. KeyDown:KeyCode=Keys.ShiftKey,KeyData=Keys.ShiftKey,Shift,修改器=Keys.Shift
  4. KeyDown:KeyCode=Keys.ShiftKey,KeyData=Keys.ShiftKey,Shift,修改器=Keys.Shift
  5. KeyDown:KeyCode=Keys.ShiftKey,KeyData=Keys.ShiftKey,Shift,修改器=Keys.Shift
  6. KeyDown:KeyCode=Keys.A、 KeyData=密钥.A | keys .Shift,修饰符=关键点.转移
  7. KeyPress:KeyChar=‘A’
  8. KeyDown:KeyCode=Keys.A、 KeyData=密钥.A | keys .Shift,修饰符=关键点.转移
  9. KeyPress:KeyChar=‘A’
  10. KeyDown:KeyCode=Keys.A、 KeyData=密钥.A | keys .Shift,修饰符=关键点.转移
  11. KeyPress:KeyChar=‘A’
  12. KeyDown:KeyCode=Keys.A、 KeyData=密钥.A | keys .Shift,修饰符=关键点.转移
  13. KeyPress:KeyChar=‘A’
  14. KeyDown:KeyCode=Keys.A、 KeyData=密钥.A | keys .Shift,修饰符=关键点.转移
  15. KeyPress:KeyChar=‘A’
  16. KeyUp:KeyCode=Keys.A.
  17. KeyUp:KeyCode=Keys.ShiftKey

请注意,KeyPress出现在in between KeyDownKeyUp之后,正如许多其他答案所述,KeyPress在没有生成字符时不被调用,KeyDown在按下键时被重复,这也与许多其他答案相反.

执行not的按键示例直接导致呼叫KeyPress:

  • ShiftCtrlAlt
  • F1F12
  • 方向键

do导致调用KeyPress的键示例:

  • AZ09,等等.
  • 空格键
  • 制表符(KeyChar=‘\t’,ASCII 9)
  • 输入(KeyChar=‘\r’,ASCII 13)
  • Esc(KeyChar='\x1b',ASCII 27)
  • 退格(KeyChar='\b',ASCII 8)

对于好奇的人来说,KeyDownWM_KEYDOWNKeyPressWM_CHARKeyUpWM_KEYUP大致相关.WM_KEYDOWN can的调用可能少于密钥重复次数,但它会发送一个重复计数,IIRC,WinForms使用该计数每次重复只生成一个KeyDown.

.net相关问答推荐

Msbuild try 构建 msbuild.exe 而不是我的 .csproj 文件

既然 .NET 有一个垃圾收集器,为什么我们需要终结器/析构器/dispose-pattern?

从 byte[] 创建 zip 文件

在 web api 控制器(.net 核心)中使用 async/await 或任务

将客户端证书添加到 .NET Core HttpClient

有没有办法以编程方式最小化窗口

如何在 C# 中打开 Excel 文件?

Select 文件夹对话框 WPF

为什么递归调用会导致不同堆栈深度的 StackOverflow?

.Net 中的 Decimal.One、Decimal.Zero、Decimal.MinusOne 的用途是什么

C# 的 Actors 有什么好的实现吗?

如何在 C# 中仅设置 DateTime 变量的时间部分

所有数组在 C# 中都实现了哪些接口?

C# 测试字符串是否为整数?

如何从 .NET 读取 PEM RSA 私钥

.NET 配置文件 configSource 在应用程序目录文件夹之外

C# 中的 F# List.map 类似功能?

如何将 .NET 应用程序编译为本机代码?

如何重新启动 WPF 应用程序?

序列化一个可为空的 int