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?
14 réponses
Dans l'Événement KeyDown:
If e.KeyCode = Keys.Enter Then
Messagebox.Show("Enter key pressed")
end if
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
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.
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!
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 aussi 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 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?
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
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
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
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
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
If Asc(e.KeyChar) = 13 Then
MessageBox.Show("Enter pressed!")
e.Handled = True
End If
si E. KeyCode = 13 Alors SendKeys.Envoyer ({"ONGLET"}) Les Instructions de Fin Si