释放键时触发键向上事件。这适用于 a、b 等普通键。但是,按住箭头键或退出键会产生不同的结果。不是在释放按键时触发按键向上事件,而是在按键按下事件后立即触发。因此,按住箭头键就等于非常快速地多次按下和释放该键。任何解释和解决方法以确定何时实际释放密钥?
DotNET
问问题
1617 次
2 回答
3
在您释放键之前,实际上不会触发 KeyUp 事件(对于所有键,而不仅仅是箭头键等),只有许多重复的 KeyDown 事件。至少,从一些测试代码来看,我是这样看的。
我的解决方法是在使用检测到 KeyDown 事件后禁用 KeyDown 处理程序
RemoveHandler Me.KeyDown, AddressOf Form1_KeyDown
然后在触发 KeyUP 事件时重新启用。
AddHandler Me.KeyDown, AddressOf Form1_KeyDown
当然,如果您想同时处理多个按键,那么这是行不通的。您必须存储有问题的 Key 是否已经关闭并忽略相应的 KeyDown 事件。
于 2009-02-10T10:12:00.470 回答
1
我刚刚遇到了类似的问题。键盘处理程序的行为很奇怪:
如果焦点和处理程序在文本框中:
- 按住字母数字键时,我得到了多个 Press and Down 事件
- 箭头和功能键产生多个向下事件
如果为启用了 KeyPreview 的表单处理事件,则仅处理箭头键的 KeyUp 事件。
可以通过覆盖 ProcessCmdKey 来处理较低级别的所有键。
如果要处理左箭头键:
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Select Case keyData
Case Keys.Left
Debug.WriteLine("Left")
Return True
Case Else
Return MyBase.ProcessCmdKey(msg, keyData)
End Select
End Function
于 2009-06-19T07:53:46.773 回答