在VB.NET上检测Enter键

Detecting Enter keypress on VB.NET

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

我的表单中有一些文本框。 当用户在我的一个文本框上按ENTER键时,我希望出现类似选项卡的行为。 我使用以下代码:

1
2
3
4
5
6
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

但这对我不起作用。

解决办法是什么?


在KeyDown事件中:

1
2
3
 If e.KeyCode = Keys.Enter Then
       Messagebox.Show("Enter key pressed")
 end if


确保窗体的KeyPreview属性设置为true。

1
2
3
4
5
6
7
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


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

1
2
3
4
5
6
7
8
9
10
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

现在,当您在文本框上按Enter时,该控件将移至下一个控件。


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

1
2
3
4
5
6
7
8
9
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

奇迹般有效!


您可以使用PreviewKeyDown事件

1
2
3
4
5
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

在VB.NET 2010上测试


我看到已经解决了这个问题,但是您似乎可以通过将验证挂接到表单上的AcceptButton上来避免回车键的所有这种"重新映射"。即。您有3个文本框(txtA,txtB,txtC)和一个"确定"按钮设置为AcceptButton(并且TabOrder设置正确)。因此,如果在txtA中并且按回车键,则数据无效,则焦点将停留在txtA中,但如果有效,则假设其他txt需要输入,验证只会将您放入需要有效输入的下一个txt中,因此模拟TAB行为...一旦所有txt均具有有效输入,按Enter将触发成功的验证并关闭表格(或其他方式)是否有意义?


也可以尝试这样:

1
2
3
If e.KeyChar = ChrW(Keys.Enter) Then
     'Do Necessary code here
End If


使用KeyDown事件代替KeyPress

1
2
3
If e.KeyCode = Keys.Enter Then
   MsgBox ("You pressed enter")
End if

注意:请确保您没有在表单上设置"接受按钮"。 AcceptButton将其设置为"无"


1
2
3
4
If Asc(e.KeyChar) = 13 Then
 MessageBox.Show("Enter pressed!")
 e.Handled = True
End If


使用此代码,它将可以正常工作。
您应单击TextBox1,然后转到event并选择Keyup并双击它。然后您将获得SUB的行。

1
2
3
4
5
6
7
Private Sub TextBox1_KeyUp(ByVal sender As System.Object, ByVal e As      
System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
    If e.KeyCode = Keys.Enter Then
        MsgBox("Fel l?senord")

    End If
End Sub


以下代码将起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Class Form1
    Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar = Convert.ToChar(13) Then
            MsgBox("enter key pressd")
        End If
    End Sub
End Clas

Public Class Form1
    Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then
            MsgBox("enter key pressd")
        End If
    End Sub
End Class


使用此代码,这可能有助于您在用户按下Enter键时获得类似于选项卡的行为

1
2
3
4
5
6
7
8
9
 Private Sub TxtSearch_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TxtSearch.KeyPress
    Try
        If e.KeyChar = Convert.ToChar(13) Then
           nexttextbox.setfoucus
        End If
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

1
2
3
4
5
6
7
8
9
10
Private Sub BagQty_KeyPress(sender As Object, e As KeyPressEventArgs) Handles BagQty.KeyPress

        Select e.KeyChar

            Case Microsoft.VisualBasic.ChrW(Keys.Return)
                PurchaseTotal.Text = Val(ActualRate.Text) * Val(BagQty.Text)
        End Select


    End Sub

我遇到了同样的问题,我无法在Framework 2.0上使用此答案,因此我进行了更深入的研究。

您必须首先处理文本框上的PreviewKeyDown,以便在输入ENTER时设置IsInputKey,以便可以由文本框上的keyDown事件处理或将其转发给该事件。像这样:

1
2
3
4
5
6
Private Sub txtFiltro_PreviewKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles txtFiltro.PreviewKeyDown
    Select Case e.KeyCode
        Case Keys.Enter
            e.IsInputKey = True
    End Select
 End Sub

然后您将在文本框上处理事件keydown。答案之一是在正确的轨道上,但是没有设置e.IsInputKey。

1
2
3
4
5
6
Private Sub txtFiltro_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtFiltro.KeyDown
    If e.KeyCode = Keys.Enter Then
        e.handled = True
        Textbox1.Focus()
    End If
End Sub