2

释放键时触发键向上事件。这适用于 a、b 等普通键。但是,按住箭头键或退出键会产生不同的结果。不是在释放按键时触发按键向上事件,而是在按键按下事件后立即触发。因此,按住箭头键就等于非常快速地多次按下和释放该键。任何解释和解决方法以确定何时实际释放密钥?

4

2 回答 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 回答