web-dev-qa-db-fra.com

Détecter Entrez la pression sur VB.NET

J'utilise .NET 3.5 Framework de VB.NET 2008.

J'ai quelques zones de texte dans mon formulaire. Je veux le comportement de type onglet lorsque mon utilisateur appuie sur ENTRÉE sur l'un de mes champs de texte. J'ai utilisé le code suivant:

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

Mais ça ne marche pas pour moi.

Quelle est la solution?

21
Tareq

Il n'est pas nécessaire de définir la propriété KeyPreview sur True. Ajoutez simplement la fonction suivante.

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

Désormais, lorsque vous appuyez sur Entrée sur une zone de texte, le contrôle passe au contrôle suivant.

10
Tareq

Dans l'événement KeyDown:

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

Assurez-vous que la propriété KeyPreview du formulaire est définie sur 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
21
Eric Schneider

J'utilise VB 2010 .NET 4.0 et j'utilise les éléments suivants:

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

Fonctionne comme un charme!

9
EConway

Vous pouvez utiliser PreviewKeyDown Event

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

Testé sur VB.NET 2010

5
Dung Vu

peut également essayer ceci: 

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

Je vois que cela a été répondu, mais il semble que vous puissiez éviter tout ce "remappage" de la clé entrée en accrochant simplement votre validation à AcceptButton sur un formulaire. c'est à dire. vous avez 3 zones de texte (txtA, txtB, txtC) et un bouton "OK" réglé sur AcceptButton (et TabOrder correctement défini). Donc, si dans txtA et que vous appuyez sur enter, si les données sont invalides, votre focus restera dans txtA, mais si elle est valide, en supposant que les autres txts nécessitent une entrée, la validation vous mettra simplement dans le prochain txt qui nécessite une entrée valide. simuler le comportement de tabulation ... une fois que tous les émetteurs ont une entrée valide, appuyer sur Entrée déclenche une validation réussie et ferme le formulaire (ou autre chose ...).

3
halfacreSal

Utilisez l'événement KeyDown au lieu de KeyPress

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

Remarque: Assurez-vous de ne pas définir le bouton ACCEPTER sur votre formulaire. AcceptButton l'a mis à 'none'

1
Herbert Yeo

utiliser ce code cela pourrait vous aider à obtenir un comportement semblable à un onglet lorsque l'utilisateur appuie sur Entrée 

 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
0
Lord_of_Lucifer
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
0
Ameer Chand

J'avais le même problème et je ne pouvais pas faire en sorte que cette réponse fonctionne avec Framework 2.0. J'ai donc creusé plus profondément.

Vous devez d'abord gérer PreviewKeyDown dans la zone de texte. Ainsi, lorsque vous entrez ENTRÉE, vous devez définir IsInputKey de sorte qu'elle puisse être gérée par ou transmise à l'événement keyDown de la zone de texte. Comme ça:

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

et puis vous géreriez l'événement keydown sur la zone de texte. Une des réponses était sur la bonne voie mais manquait la configuration de l'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
0
user4509414

Utilisez ce code cela fonctionnera OK . Vous devrez cliquer sur TextBox1 puis aller à event et sélectionner Keyup et double-cliquer dessus Vous obtiendrez alors les lignes pour le 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
0
Björn Edoff

Le code suivant fonctionnera.

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
0
Björn Edoff
If Asc(e.KeyChar) = 13 Then
 MessageBox.Show("Enter pressed!")
 e.Handled = True
End If
0
Alexander Malygin