代码之家  ›  专栏  ›  技术社区  ›  Tareq

在vb.net上检测回车键

  •  21
  • Tareq  · 技术社区  · 16 年前

    我正在使用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
    

    但它对我不起作用。

    解决方案是什么?

    14 回复  |  直到 7 年前
        1
  •  34
  •   hawbsl    13 年前

    在keydown事件中:

     If e.KeyCode = Keys.Enter Then
           Messagebox.Show("Enter key pressed")
     end if
    
        2
  •  21
  •   Eric Schneider    16 年前

    确保表单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
    
        3
  •  10
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    不需要将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
    

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

        4
  •  9
  •   EConway    12 年前

    我正在使用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
    

    真是魅力四射!

        5
  •  5
  •   DÅ©ng IT    10 年前

    可以使用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上测试

        6
  •  3
  •   John Saunders    12 年前

    也可以尝试:

    If e.KeyChar = ChrW(Keys.Enter) Then
         'Do Necessary code here
    End If
    
        7
  •  3
  •   halfacreSal    11 年前

    我看到这个问题已经得到了回答,但似乎您可以通过简单地将验证挂接到表单上的AcceptButton来避免Enter键的所有“重新映射”。例如,您有3个文本框(txta、txtb、txtc)和一个“确定”按钮设置为“接受”按钮(和taborder设置正确)。所以,如果在txta中点击enter,如果数据无效,您的焦点将停留在txta中,但是如果它是有效的,假设其他txts需要输入,验证将把您放入下一个需要有效输入的txt中,从而模拟tab行为…一旦所有的txts都有了有效的输入,按Enter键将触发一个成功的验证并关闭表单(或其他…)是否有意义?

        8
  •  1
  •   Herbert Yeo    7 年前

    使用按键事件而不是按键

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

    注意:确保表单上没有设置“接受”按钮。AcceptButton将其设置为“无”

        9
  •  0
  •   user4509414    10 年前

    我也遇到了同样的问题,我无法在框架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
    

    然后在文本框上处理事件键。其中一个答案是正确的,但没有设置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
    
        10
  •  0
  •   Ameer Chand    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
    
        11
  •  0
  •   Lord_of_Lucifer    10 年前

    使用此代码这可能有助于在用户按Enter键时获得类似于制表符的行为。

     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
    
        12
  •  0
  •   Pang Ajmal PraveeN    9 年前

    以下代码将起作用。

    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
    
        13
  •  0
  •   Björn Edoff    9 年前

    使用此代码,它会正常工作。 您应单击文本框1,然后转到事件并选择keyup并双击它。然后你会得到潜艇的航线。

    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
    
        14
  •  0
  •   Alexander M.    8 年前
    If Asc(e.KeyChar) = 13 Then
     MessageBox.Show("Enter pressed!")
     e.Handled = True
    End If