在VB.NET上检测Enter keypress

Tar*_*req 24 vb.net

我正在使用VB.NET 2008的.NET 3.5框架.

我的表格中有一些文本框.当我的用户在我的一个文本框上按下ENTER时,我想要类似于标签的行为.我使用了以下代码:

Private Sub txtDiscount_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDiscount.KeyPress
    If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
        SendKeys.Send("{TAB}")
        e.Handled = True
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用.

解决办法是什么?

Din*_*age 35

在KeyDown事件中:

 If e.KeyCode = Keys.Enter Then
       Messagebox.Show("Enter key pressed")
 end if
Run Code Online (Sandbox Code Playgroud)

  • `KeyCode`似乎不是KeyPressEventArgs的属性. (9认同)
  • @Panzercrisis:这只适用于 KeyDown 事件,不适用于 KeyPress 事件。 (3认同)

Eri*_*der 25

确保将表单KeyPreview属性设置为true.

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
    If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
        SendKeys.Send("{TAB}")
        e.Handled = True
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)


Tar*_*req 11

无需将KeyPreview属性设置为True.只需添加以下功能即可.

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, _
                                           ByVal keyData As System.Windows.Forms.Keys) _
                                           As Boolean

    If msg.WParam.ToInt32() = CInt(Keys.Enter) Then
        SendKeys.Send("{Tab}")
        Return True
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function
Run Code Online (Sandbox Code Playgroud)

现在,当您在TextBox上按Enter键时,控件将移动到下一个控件.

  • 每次都移动到下一个控件!它需要将你的`If msg.WParam.ToInt32() = CInt(Keys.Enter) Then`改为`If msg.WParam.ToInt32() = CInt(Keys.Enter) AndAlso TypeOf Me.ActiveControl Is TextBox Then`使其仅适用于文本框 (2认同)

小智 9

我正在使用VB 2010 .NET 4.0并使用以下内容:

Private Sub tbSecurity_KeyPress(sender As System.Object, e As System.EventArgs) Handles tbSecurity.KeyPress
    Dim tmp As System.Windows.Forms.KeyPressEventArgs = e
    If tmp.KeyChar = ChrW(Keys.Enter) Then
        MessageBox.Show("Enter key")
    Else
        MessageBox.Show(tmp.KeyChar)
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!


IT *_*ogs 6

您可以使用PreviewKeyDown事件

Private Sub txtPassword_PreviewKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles txtPassword.PreviewKeyDown
    If e.KeyCode = Keys.Enter Then
        Call btnLogin_Click(sender, e)
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

在VB.NET 2010上测试过