Détection de la saisie VB.NET

j'utilise .NET 3.5 framework of VB.NET 2008.

j'ai quelques boîtes de texte dans ma forme. Je veux le comportement tab-like lorsque mon utilisateur appuie sur Entrée sur une de mes boîtes 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?

20
demandé sur John Saunders 2010-05-02 08:15:08

14 réponses

Dans l'Événement KeyDown:

 If e.KeyCode = Keys.Enter Then
       Messagebox.Show("Enter key pressed")
 end if
33
répondu Dinidu Hewage 2013-06-19 15:31:33

assurez-vous que la propriété Form KeyPreview est définie à 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
répondu Eric Schneider 2010-05-02 04:47:39

il n'est pas nécessaire de définir la propriété KeyPreview à True. Il suffit d'ajouter 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

Maintenant, lorsque vous appuyez sur Entrée sur une boîte de texte, le contrôle passe au contrôle suivant.

9
répondu Tareq 2013-05-24 14:40:15

j'utilise VB 2010 .NET 4.0 et utilise ce qui suit:

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!

8
répondu EConway 2014-02-25 22:11:37

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
répondu Dung Vu 2015-08-16 22:54:32

peut aussi essayer ceci:

If e.KeyChar = ChrW(Keys.Enter) Then
     'Do Necessary code here
End If
3
répondu Ika 2013-08-23 02:22:55

je vois que cela a été répondu, mais il semble que vous pourriez éviter tout ce "remapping" de la touche enter simplement en accrochant votre validation dans le AcceptButton sur un formulaire. IE. vous avez 3 boîtes de texte (txtA,txtB,txtC) et un bouton 'OK' réglé pour être AcceptButton (et TabOrder réglé correctement). Donc, si dans txtA et que vous appuyez sur Entrée, si les données sont invalides, votre focus restera dans txtA, mais si elle est valide, en supposant que les autres txts ont besoin d'entrée, la validation vous mettra simplement dans le prochain txt qui a besoin entrée valide simulant ainsi le comportement des tableaux... une fois que tous les txts ont une entrée valide, appuyer sur enter déclenchera une validation réussie et fermera le formulaire (ou n'importe quoi d'autre...) Sens?

3
répondu halfacreSal 2014-11-25 17:04:52

j'ai eu le même problème et je n'ai pas pu faire fonctionner cette réponse sur Framework 2.0 donc j'ai creusé plus profond.

vous devez d'abord gérer le "PreviewKeyDown" sur la textbox, donc quand ENTER arrive, vous définissez IsInputKey de manière à ce qu'il puisse être géré par ou transmis à l'événement "keyDown" sur la textbox. Comme ceci:

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 ensuite vous manipulez le keydown de l'événement sur la boîte de texte. L'une des réponses était sur la bonne voie, mais n'a pas réglé le 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
répondu user4509414 2015-11-16 16:08:33
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
répondu Ameer Chand 2016-01-27 18:24:48

Utilisez ce code cela pourrait vous aider à obtenir le comportement tab like 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
répondu Lord_of_Lucifer 2016-03-16 11:50:01

Le code suivant fonctionne.

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
répondu Björn Edoff 2017-03-05 09:39:16

Utilisez ce code il fonctionnera bien. Vous devez cliquer sur TextBox1 et ensuite aller à l'événement et de sélectionner Keyup et double clic sur elle. Vous obtiendrez alors les lignes pour le sous-marin.

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
répondu Björn Edoff 2017-03-05 09:48:48
If Asc(e.KeyChar) = 13 Then
 MessageBox.Show("Enter pressed!")
 e.Handled = True
End If
0
répondu Alexander Malygin 2017-12-13 11:53:30

si E. KeyCode = 13 Alors SendKeys.Envoyer ({"ONGLET"}) Les Instructions de Fin Si

-1
répondu Iulian_D 2014-02-02 11:18:00