【问题标题】:Capture keys.TAB on KeyDown捕获keys.TAB on KeyDown
【发布时间】:2013-08-06 17:52:57
【问题描述】:

我正在尝试在 Keydown 事件中捕获 TAB 按键。 我可以在How to fire an event when the tab key is pressed in a textbox?上看到另一个帖子

但是,在上面的链接上,发布的解决方案对我不起作用,我在下面提到。

Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) _
                         Handles TextBox1.KeyDown
    If e.KeyCode = Keys.Tab Then
       e.SuppressKeyPress = True
       'do something
    End If
End Sub

出于测试目的,我在 FORM1 上添加了 2 个简单的文本框,并编写了以下代码来捕获 KeyDown 事件的 TAB。

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyCode = Keys.Tab Then
        e.SuppressKeyPress = True
        MsgBox("TAB DOWN")
    End If
End Sub

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    Me.Text = e.KeyChar
End Sub

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
    If e.KeyCode = Keys.Tab Then
        MsgBox("TAB UP")
    End If
End Sub

Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
    Me.Text = "LEAVE"
End Sub

我上面的代码应该假设在按下 TAB 时在 KeyDown 上显示一个消息框。它不工作。

请让我知道我做错了什么。 提前谢谢!!!

【问题讨论】:

    标签: vb.net tabs keydown onkeydown


    【解决方案1】:

    我发现了一个名为 PreviewKeyDown() 的新事件

     Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Tab Then
            Me.Text = "TAB Capture From TextBox1_KeyDown At " & Now.ToString
        End If
    End Sub
    
    Private Sub TextBox1_PreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles TextBox1.PreviewKeyDown
        If e.KeyCode = Keys.Tab Then
            Me.Text = "TAB Capture From TextBox1_PreviewKeyDown At " & Now.ToString
        End If
    End Sub
    

    如果您将执行上述代码,您将能够在 PreviewKeyDown() 事件中捕获 TAB 键。

    【讨论】:

      【解决方案2】:

      MsgBox() 是 VB6 的保留,您应该使用消息框的 .NET 实现,如下所示:

      MessageBox.Show("TAB UP")
      

      此外,当我认为您打算设置文本框的 Text 属性时,您正在针对表单类 (Me) 的实例设置 Text 属性,如下所示:

      Me.TextBox1.Text = e.KeyChar
      

      【讨论】:

      • MessageBox.show 或 MsgBox 不是我关心的问题,因为 MsgBox 也为我工作。
      • 我正在使用 Me.Text 设置 FORM 标题,所以这对我来说工作正常。
      • 可能我的问题对你来说不是很清楚。基本上我正在尝试在 KeyDown 事件中捕获 TAB 键。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多