Code:
Private Sub KeyHandling(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Left
btnPrev.PerformClick()
Case Keys.Right
btnNext.PerformClick()
Case Keys.Up
btnFirst.PerformClick()
Case Keys.Down
btnLast.PerformClick()
End Select
End Sub
我的表单的 KeyPreview 属性已启用。
Problem:
除非我按住控制键,否则此代码不会执行任何操作。谁能解释一下吗? :)
这是因为光标键在 KeyDown 事件触发之前就被提前拦截。 Winforms使用它来移动焦点,就像Tab一样。当您按住 Ctrl 键时,它不再是导航键,您的 KeyDown 事件可以看到它。
通常,您可以通过重写 IsInputKey() 来解决此问题,但如果表单有任何控件,则该方法将不起作用。如果您将 KeyPreview 设置为 true,它们可能会这样做。窗体永远不会获得焦点,控件却能。您需要放弃 KeyPreview,无论如何,它都是旧的 VB6 不合时宜的内容,您可以通过重写 ProcessCmdKey() 来捕获光标键。像这样:
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Left Then
Console.WriteLine("left")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)