【问题标题】:Capture function keys F1..F12 in VB.NET [closed]在 VB.NET 中捕获功能键 F1..F12 [关闭]
【发布时间】:2011-06-05 13:46:55
【问题描述】:

我无法为我的应用程序捕获功能键 F1..F12。我能够捕获常规键和修饰符,例如 shiftctrlalt 等。

question 推荐KeyPreview = True,但这似乎不适用于我的应用程序。我做错了什么?

Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Me.KeyPreview = True
    AddHandler Me.KeyDown, AddressOf KeyDownsHandler
    AddHandler Me.KeyUp, AddressOf KeyUpHandler
End Sub

Private Sub KeyUpHandler(ByVal o As Object, ByVal e As KeyEventArgs)
    e.SuppressKeyPress = True
    If e.KeyCode = Keys.F1 Then
        txtMain.AppendText("F1 was pressed!" & Environment.NewLine)
    End If
    txtMain.AppendText( _
        String.Format("'{0}' '{1}' '{2}' '{3}' {4}", e.Modifiers, e.KeyValue, e.KeyData, e.KeyCode, Environment.NewLine))
End Sub

Private Sub KeyDownHandler(ByVal o As Object, ByVal e As KeyEventArgs)
    e.SuppressKeyPress = True
    txtMain.AppendText( _
        String.Format("'{0}' '{1}' '{2}' '{3}' {4}", e.Modifiers, e.KeyValue, e.KeyData, e.KeyCode, Environment.NewLine))
End Sub

【问题讨论】:

  • 用户错误 :(...我使用的是 Microsoft 键盘,它要求打开键 F Lock
  • 太棒了。哈哈,每个人都会遇到。

标签: .net vb.net winforms .net-2.0 keypress


【解决方案1】:

对于捕获键(包括功能键)我已经开始使用这种模式,效果很好:

    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.F2
                ' Do something 

            Case Keys.F3
                ' Do more

            Case Keys.Escape
                ' Crap

            Case Else
                Return MyBase.ProcessCmdKey(msg, keyData)

        End Select

        Return True
    End Function

这将自动抑制您在Select 语句中处理的每个键。如果你想使用 Shift、Alt 或 Ctrl 的组合,你只需要Or 他们。当然,这适用于非常低的Form 级别,这使得它独立于您在该表单上拥有的任何控件。如果您不知道,它也会触发奇怪的行为,例如焦点跳跃或行为不良的控件。

【讨论】:

    【解决方案2】:

    您的代码对我有用,但您的 EventHandler 声明中有错字。变化:

    AddHandler Me.KeyDown, AddressOf KeyDownsHandler
    

    AddHandler Me.KeyDown, AddressOf KeyDownHandler
    

    【讨论】:

    • 感谢您验证我的代码。我搞砸了。我正在使用 Microsoft 键盘,它需要打开键 F Lock
    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2023-04-09
    • 2014-02-03
    • 1970-01-01
    • 2015-03-31
    • 2012-06-05
    • 2012-08-13
    相关资源
    最近更新 更多