Dumpy92
Messages postés7Date d'inscriptiondimanche 17 avril 2011StatutMembreDernière intervention30 avril 2011
-
18 avril 2011 à 00:10
foliv57
Messages postés420Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention15 juillet 2014
-
18 avril 2011 à 08:12
Bonjour à tous, j'ai un problème avec le code suivant:
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
Do
Me.TextBox2.Text = ""
Loop Until IsNumeric(Me.TextBox2.Text)
Valeur2 = Me.TextBox2.Text
End Sub
Enfait, c'est pour un test dans une calculatrice. L'utilisateur devrait saisir ses valeurs dans deux cases séparées. Le but étant que ce soient évidemment des valeurs numériques, je cherche donc à empêcher la saisie de caractère. C'est pour ça que je me suis dit que ce code devrait réinitialiser la case jusqu'a ce que la valeur saisie soit numérique (avec le loop until). Mais voilà, ça ne marche pas ^^. Alors si vous avez des idées, ou une autre façon de faire, je suis preneur !
foliv57
Messages postés420Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention15 juillet 20149 18 avril 2011 à 08:10
Bonjour,
Calade a raison, mais attention, dans l'evenement keydown on ne connait pas le caractère frappé, mais son KeyCode.
Voici un exemple qui passe en revu les différentes possibilités :
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles TextBox1.KeyDown Dim txtB as TextBox = CType(sender, TextBox)
'Appuis sur la touche "-"
If (Not e.Shift) And (Not e.Control) And (Not e.Alt) And _
((e.KeyCode Keys.D6) Or (e.KeyCode Keys.Subtract)) Then
'Si le curseur n'est pas au début du champ
'ou qu'un '-' est déjà présent
If (txtB.SelectionStart <> 0) Or _
((txtB.Text.Length > 0) AndAlso (txtB.Text.Substring(0, 1) = "-")) Then
e.SuppressKeyPress = True
End If
Else
'Si la frappe ne correspond ni à un chiffre ou un déplacement ou une suppression
If Not ((e.Shift And (Not e.Alt) And (Not e.Control) And _
((e.KeyCode >= Keys.D0) And (e.KeyCode <= Keys.D9))) Or _
(e.KeyCode Keys.Left) Or (e.KeyCode Keys.Right) Or _
(e.KeyCode Keys.End) Or (e.KeyCode Keys.Home) Or _
((Not e.Shift) And (Not e.Alt) And (Not e.Control) And _
((e.KeyCode = Keys.Enter) Or _
(e.KeyCode = Keys.Back) Or _
(e.KeyCode = Keys.Delete) Or _
((e.KeyCode >= Keys.NumPad0) And (e.KeyCode <= Keys.NumPad9))))) Then
e.SuppressKeyPress = True
End If
End If
End Sub
J'avoue que le deuxième If fait mal au yeux, mais il controle toutes les frappes possibles dans le cas d'un numéric (sauf copier/coller que l'on peut ajouter si nécessaire) avec controle des combinaisons de touches spéciales avec Ctrl, Alt ou Shift.
Il y a aussi une technique moins lourde en controlant le text sur validation.
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If Not IsNumeric(Me.TextBox1.Text) Then
MessageBox.Show("Veuillez saisir un numéric")
e.Cancel = True
End If
End Sub