【问题标题】:Form keyDown not working?表单keyDown不起作用?
【发布时间】:2011-07-28 18:50:31
【问题描述】:
Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    If e.Control Then
        MessageBox.Show("aaaa")
    End If
End Sub

如您所见,我的表单将检查何时按下控制键。 但它不起作用。为什么?

【问题讨论】:

  • 当您按下 Ctrl 键时,光标是否位于任何其他 UI 元素(标签、按钮等)上?
  • 不,我相信我的光标在空闲空间上。
  • 只是检查,但请参阅 wageoghe 的答案。我总是也忘记了这一点。

标签: vb.net winforms visual-studio


【解决方案1】:

我现在不在计算机附近,因此无法对此进行测试,但是当我以前想在表单上获取关键事件时,我会将 Form1.KeyPreview 设置为 True(或类似的东西)。

【讨论】:

  • 嗯,我不认为我可以将 Form1.KeyPreview 设置为 true...没有选项。
  • 我很惊讶它不存在。请参阅此 MSDN 链接:msdn.microsoft.com/en-us/library/…
  • 啊!我使用 Form1 而不是 Me。对不起。非常感谢您的帮助。
【解决方案2】:

效果很好。我假设您的表单中有其他控件。其中之一将获得焦点,而不是形式。键盘输入只会转到具有焦点的控件。

您可以将表单的 KeyPreview 属性设置为 True。 Winforms 的方式是重写 ProcessCmdKey() 方法。

【讨论】:

    【解决方案3】:

    您需要在加载表单时将 KeyPreview 设置为 true,然后它应该可以工作

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Me.KeyPreview = True
    End Sub
    
    Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
        MsgBox(e.KeyChar)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2013-03-16
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      相关资源
      最近更新 更多