( Je n'ai pas trouvé de section Présentation, alors je poste directement ma question. )

Bonjour,

Je sais que ce sujet a été maintes fois abordé, mais si je me permet de poster c'est que les réponses glanées sur le net ne m'ont pas aidé.

J'aimerai qu'une TextBox n'accepte que les chiffres de 0 à 9, les touches Virgule, Backspace et Delete.

Dans ce post, les réponses sont du genre "Lis le cours VB.NET (de Philippe Lasserre)" ou "On va pas le faire à ta place !"

Je l'ai donc lu et j'ai trouvé une technique qui fonctionne parfaitement, adaptée a mes demandes cela donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar <> "," And e.KeyChar <> "0" And e.KeyChar <> "1" And e.KeyChar <> "2" And e.KeyChar <> "3" And e.KeyChar <> "4" And e.KeyChar <> "5" And e.KeyChar <> "6" And e.KeyChar <> "7" And e.KeyChar <> "8" And e.KeyChar <> "9" Then e.KeyChar = CType("", Char)
    End Sub
Malheureusement, selon Microsoft, il n'y a pas de codes pour les touches Backspace et Delete.

De plus, ca fait un "TING" pour le moins énervant à chaque fois qu'on entre une touche non valide.

Il faudrait donc trouver une autre méthode.

Je sais par contre que les touches que je cherche à accepter ou refuser ont toutes un code Ascii distinct.

Seulement je ne comprends pas les différents exemples trouvé par-ci par-là.



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Private Sub montant_KeyPress(Index As Integer, KeyAscii As Integer)
'les chiffres 0 à 9 ont les codes ASCII 48 à 57
'43 est le signe +, 45 est le signe - et 46 est le point .
If (KeyAscii < 48 Or KeyAscii > 57) _
And Not KeyAscii = 43 _
And Not KeyAscii = 45 _
And Not KeyAscii = 46 Then
KeyAscii = 0
End If
End Sub
Je recopie ça ( bouh c'est mal je sais ), et je rajoute

"montant_KeyPress(TextBox1.Text)"

dans la section

"Private Sub TextBox1_TextChanged ..."

Cela donne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        montant_KeyPress(TextBox1.Text)
    End Sub
Mais je recois une erreur :
Argument not specified for parameter 'KeyAscii' of 'Private Sub montant_KeyPress(Index As Integer, KeyAscii As Integer)'
Je suis totalement perdu.

Si une âme charitable pouvais me donner un coup de main, je lui en serai très reconnaissant !

Je travail sur Visual Basic 2010.

Merci d'avance.

François.