当没有按键时,VB.Net中的KeyDown事件触发

时间:2011-08-20 08:11:48

标签: .net vb.net visual-studio visual-studio-2008

我正在运行VS 2008并在Windows 7机器上构建我的应用程序。主窗体/窗口中有一个KeyDown事件处理程序,如下所示:

Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    MsgBox("control = " + e.Control.ToString + ", shift = " + e.Shift.ToString + ", e.Keycode = " + e.KeyCode.ToString)

当我构建它并在VS中运行它似乎运行正常。出现消息框,其中包含控制和移位键的状态以及按下的键的键代码。但是,如果我在主窗体打开后立即使用可执行文件并在XP框(均使用.Net Runtime 3.5)上运行它,则会显示消息框。基本上,“KeyDown”事件似乎在没有按任何键的情况下触发。消息框带有:"control = False, shift = False, e.Keycode = None"

这怎么可能?如果没有按下任何键,如何触发keyDown事件(由消息框中包含的输出确认?)

有关可能发生的事情的建议或我如何在XP盒子上诊断它,因为它上面没有Visual Studio?

更新我尝试创建一个全新的项目,其中只有“form1”,其背后唯一的代码是keyDown事件处理程序。它只是打开一个空白窗口,如果按下某个键,则会弹出消息框。它在Win 7盒子上按预期工作,但是当我将可执行文件移动到XP盒子时,它会立即弹出消息框而不按任何键。很奇怪。

2 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是覆盖表单的ProcesCmdKey,如下例所示:

   Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
    MessageBox.Show("Pressed" & Convert.ToChar(keyData))
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

问候。

答案 1 :(得分:0)

有时.net控制表单或应用初始化。微软称这是“按设计”。如果遇到问题,可以使用flag变量中止keydown处理程序中的任何处理,直到加载表单为止。