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?
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.
Dans l'événement KeyDown:
If e.KeyCode = Keys.Enter Then
Messagebox.Show("Enter key pressed")
end if
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
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!
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
peut également essayer ceci:
If e.KeyChar = ChrW(Keys.Enter) Then
'Do Necessary code here
End If
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 ...).
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'
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
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
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
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
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
If Asc(e.KeyChar) = 13 Then
MessageBox.Show("Enter pressed!")
e.Handled = True
End If