在VB.NET上检测Enter keypress

时间:2010-05-02 04:15:09

标签: 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

但它对我不起作用。

解决方案是什么?

15 个答案:

答案 0 :(得分:34)

在KeyDown事件中:

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

答案 1 :(得分:21)

确保将表单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

答案 2 :(得分:10)

无需将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

现在,当您在TextBox上按Enter键时,控件将移至下一个控件。

答案 3 :(得分: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

像魅力一样!

答案 4 :(得分:5)

您可以使用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

在VB.NET 2010上测试

答案 5 :(得分:3)

也可以试试这个:

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

答案 6 :(得分:3)

我看到这已经得到了解答,但似乎你可以避免所有这些重新映射'只需将验证挂钩到表单上的AcceptButton即可输入密钥。即。你有3个文本框(txtA,txtB,txtC)和一个' OK'按钮设置为AcceptButton(并正确设置TabOrder)。因此,如果在txtA中并且你点击回车,如果数据无效,你的焦点将保留在txtA中,但如果它有效,假设其他txts需要输入,验证将只是让你进入需要有效输入的下一个txt模拟TAB行为...一旦所有txts都有有效输入,按Enter键将触发一个succsessful验证和关闭表单(或者其他......)有意义吗?

答案 7 :(得分:1)

使用KeyDown事件代替KeyPress

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

注意:请确保您在表单上未设置“接受按钮”。 AcceptButton将其设置为“无”

答案 8 :(得分:0)

我遇到了同样的问题,我无法在Framework 2.0上使这个答案工作,所以我深入挖掘。

您必须首先处理文本框上的PreviewKeyDown,因此当ENTER出现时,您将设置IsInputKey,以便它可以由文本框上的keyDown事件处理或转发。像这样:

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。

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

使用此代码,当用户按下

时,这可能会帮助您获得类似行为的标签
 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

答案 11 :(得分:0)

以下代码可以使用。

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

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

我已经在Visual Studio 2019上测试了此代码

效果出色

只需将其粘贴到您的表单代码中

它将以相同的形式在所有文本框中使用

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
    Dim keyCode As Keys = CType(msg.WParam, IntPtr).ToInt32
    Const WM_KEYDOWN As Integer = &H100

    If msg.Msg = WM_KEYDOWN AndAlso keyCode = Keys.Enter _
     AndAlso Me.ActiveControl.GetType.Name = "TextBox" Then
        Me.SelectNextControl(Me.ActiveControl, True, True, False, True)
        Return True

    End If
    Return MyBase.ProcessCmdKey(msg, keyData)


End Function