2010-05-02 7 views
18
keypress

J'utilise .NET Framework 3.5 de VB.NET 2008.Detecting Entrez sur VB.NET

J'ai quelques zones de texte dans ma forme. Je veux le comportement semblable à une tabulation lorsque mon utilisateur appuie sur ENTRÉE dans une de mes zones 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 cela ne fonctionne pas pour moi.

Quelle est la solution?

+1

fonctionne pour moi, même si l'aide SendKeys ne serait pas mon solution idéale –

+0

quand vous dites « Mais ce doen't travail pour moi. », S'il vous plaît décrire exactement ce qui se passe. nous n'avons pas de boules de cristal .... –

+0

AcceptsReturn sont réglés pour Multiline Edit Control. Mais j'ai une seule ligne TextBox. – Tareq

Répondre

9

Il n'est pas nécessaire de définir la propriété KeyPreview sur True. Ajoutez simplement la fonction suivante. Maintenant, lorsque vous appuyez sur Entrée sur un contrôle TextBox, le contrôle passe au contrôle suivant.

+1

C'est presque la même chose que ma méthode, sauf à un niveau inférieur. Avez-vous même essayé mon code? Cela fonctionne ... – eschneider

+0

Il passe à la commande suivante à chaque fois! Il doit changer votre 'Si msg.WParam.ToInt32() = CInt (Keys.Enter) Then' en' Si msg.WParam.ToInt32() = CInt (Keys.Enter) Et aussi Type de Me.ActiveControl est TextBox Then' à make it only works pour les zones de texte – genespos

19

Assurez-vous que la propriété KeyPreview de 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 
+2

le gestionnaire est sur une zone de texte, pas le formulaire ... –

+1

KeyPreview La propriété est définie. Mais rien ne s'est passé!!! – Tareq

+1

Cela fonctionne pour moi; mais vous devez avoir la KeyPreview définie sur true ... – eschneider

31

En cas KeyDown:

If e.KeyCode = Keys.Enter Then 
     Messagebox.Show("Enter key pressed") 
end if 
+5

+ 1 sortie facile :) – itsols

+5

'KeyCode' ne semble pas être une propriété de KeyPressEventArgs. – Panzercrisis

+0

@Panzercrisis: Cela ne fonctionne que dans l'événement KeyDown, pas dans l'événement KeyPress. –

3

peut aussi essayer ceci:

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

-1: C'est à peu près la même réponse que http://stackoverflow.com/a/15994134/76337 –

+0

En fait, quand j'ai essayé la réponse liée, cela ne fonctionnerait pas dans VS2012. Ajout de la «ChrW» a fait l'affaire. Il est, cependant, similaire à http://stackoverflow.com/a/2752456/2711474 – TesseractE

-1

Si e.KeyCode = 13 Alors SendKeys.Send ({ "TAB"}) « Instructions End If

+1

Vous devez expliquer votre réponse, pas seulement mettre du code. – Manolo

6

J'utilise VB 2010 .NET 4.0 et 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!

3

Je vois que cela a été répondu, mais il semble que vous pourriez éviter tout ce remappage de la clé d'entrée en accrochant simplement votre validation dans le bouton AcceptButton sur un formulaire. c'est à dire. vous avez 3 zones de texte (txtA, txtB, txtC) et un bouton 'OK' défini pour être AcceptButton (et TabOrder réglé correctement). Donc, si dans txtA et 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 placera dans le prochain txt qui nécessite une entrée valide. simuler le comportement de TAB ... une fois que tous les txts ont une entrée valide, appuyer sur enter lancera une validation réussie et fermera la forme (ou quoi que ce soit ...).

5

Vous pouvez utiliser l'événement 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 

Testé sur VB.NET 2010

0

J'ai eu le même problème et je ne pouvais pas faire ce travail de réponse sur Framework 2.0, donc je plongeai.

Vous devez d'abord gérer PreviewKeyDown dans la zone de texte. Lorsque ENTER est arrivé, vous devez définir IsInputKey afin qu'il puisse être géré par ou transmis à l'événement keyDown dans la zone de texte. 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 

puis de gérer le raccourci d'événement dans la zone de texte. L'une des réponses était sur la bonne voie mais a manqué de régler 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
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

utiliser ce code cela pourrait vous aider à obtenir onglet comme comportement lorsque l'utilisateur appuie entrer

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

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

Utilisez ce code pour que cela fonctionne. Vous devez cliquer sur TextBox1, puis aller à l'événement 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

Donc, 7 ans plus tard, une suggestion avec un message suédois;) Peut-être correspondre à son problème? – mplungjan

+0

Ce sera mieux avec un KeyDown, sinon lorsque vous appuyez sur Entrée sur le clavier pour le rejeter, et vous obtenez le même message d'alerte, et vous êtes coincé dans un coup d'oeil. –

0
If Asc(e.KeyChar) = 13 Then 
MessageBox.Show("Enter pressed!") 
e.Handled = True 
End If 
+0

Ne pas oublier le retour arrière: 'Asc (e.KeyChar) = 8' –