VS2008 - Comment faire saisir que du numérique dans un textbox

Résolu
progbuilder Messages postés 25 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 18 avril 2010 - 15 avril 2010 à 00:02
NikatorS Messages postés 147 Date d'inscription mercredi 18 septembre 2002 Statut Membre Dernière intervention 15 avril 2011 - 18 avril 2010 à 16:45
Bonjour,

J'ai sur ma WinForm des champs que l'utilisateur doit remplir en numérique.
Par exemple des quantité?

Comment je peux forcer l'utilisateur à taper que des chiffres?

Merci pour vôtre aide.

13 réponses

cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
18 avril 2010 à 12:38
En utilisant l'event KeyPress et non KeyDown.

    
Private Sub TextBox1_KeyPress(ByVal sender As System.Windows.Forms.TextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    If IsNumeric(e.KeyChar) Or e.KeyChar vbTab Or e.KeyChar vbBack Then
        e.Handled = False
    Else
        e.Handled = True
    End If
End Sub


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
15 avril 2010 à 01:10
Tu peux utiliser un NumericUpDown.
Autre solution http://www.vbfrance.com/codes/TEXTBOX-NUMERIQUE_37941.aspx


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
NikatorS Messages postés 147 Date d'inscription mercredi 18 septembre 2002 Statut Membre Dernière intervention 15 avril 2011
15 avril 2010 à 01:15
Deux possibilités

1) Tu utilise un MaskedTextBox au lieu d'un TextBox

2) Tu sert de l'événement KeyDown, comme ceci
    Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        Select Case e.KeyCode
            Case Keys.D0, Keys.D1, Keys.D2, Keys.D3, Keys.D4, _
                 Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, _
                 Keys.NumPad0, Keys.NumPad1, Keys.NumPad2, _
                 Keys.NumPad3, Keys.NumPad4, Keys.NumPad5, _
                 Keys.NumPad6, Keys.NumPad7, Keys.NumPad8, _
                 Keys.NumPad9
                e.SuppressKeyPress = False
            Case Else
                e.SuppressKeyPress = True
        End Select
    End Sub

S Nikator
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
15 avril 2010 à 01:19
Tu sert de l'événement KeyDown

Je pense qu'il vaut mieux gérer l'évènement KeyPress (qui te donne un caractère) plutôt que KeyDown (qui te donne une touche, c'est plus dur à gérer).


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NikatorS Messages postés 147 Date d'inscription mercredi 18 septembre 2002 Statut Membre Dernière intervention 15 avril 2011
15 avril 2010 à 07:52
Exacte ! L'évènement KeyPress sera plus simple.


S Nikator
Zayann Messages postés 75 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 15 juillet 2015 1
15 avril 2010 à 16:03
Bonjour, un petit code tout simple...
    Private Sub TextBox1_KeyPress(ByVal sender As System.Windows.Forms.TextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If IsNumeric(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub


Voila pour savoir si une touche (ou une combinaison) renvoie une valeur numérique...
Par contre, le sender est dans l'espace System.Windows.Forms.TextBox
A bientôt...
progbuilder Messages postés 25 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 18 avril 2010
15 avril 2010 à 23:19
Bonjour Zayann,

Le code marche bien cependant j'ai n soucis c'est que si l'utilisateur se trompe lors de la saisie il peut pas corriger sa saisie en supprimant.
bouton dell ne fait rien.

merci
NikatorS Messages postés 147 Date d'inscription mercredi 18 septembre 2002 Statut Membre Dernière intervention 15 avril 2011
16 avril 2010 à 08:17
On en revient donc mon code. Il faut juste rajouter la touche correction (Keys.Back) et entrer (Keys.Enter) aussi si tu veux.
    Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        Select Case e.KeyCode
            Case Keys.D0, Keys.D1, Keys.D2, Keys.D3, Keys.D4, _
                 Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9, _
                 Keys.NumPad0, Keys.NumPad1, Keys.NumPad2, _
                 Keys.NumPad3, Keys.NumPad4, Keys.NumPad5, _
                 Keys.NumPad6, Keys.NumPad7, Keys.NumPad8, _
                 Keys.NumPad9, Keys.Back, Keys.Enter
                e.SuppressKeyPress = False
            Case Else
                e.SuppressKeyPress = True
        End Select
    End Sub


S Nikator
progbuilder Messages postés 25 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 18 avril 2010
18 avril 2010 à 12:29
Je suis embetant mais le code marche mais un petit détail lol. Quand j'utilise les touches en dessous les touches F1,F2.. il m'autorise les valeurs &,é,#...

Sait on éviter cela?
NikatorS Messages postés 147 Date d'inscription mercredi 18 septembre 2002 Statut Membre Dernière intervention 15 avril 2011
18 avril 2010 à 13:04
Bien vu GG29 ! J'avais oublié qu'on pouvait récupérer une touche par sa constante.

Quoi qu'il en soit je préfère quand même la solution sans code : le contrôle NumericUpDown ou le MaskedTextBox


S Nikator
progbuilder Messages postés 25 Date d'inscription lundi 5 mai 2008 Statut Membre Dernière intervention 18 avril 2010
18 avril 2010 à 13:32
Merci tous le monde pour vôtre aide.

J'aimerais lorsque j'appuie Enter ca simule un click sur un bouton.

En vb6 cela se faisait avec la propriétés 'Default' sur le bouton.
Mais la ca marche pas.

Merci
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
18 avril 2010 à 13:35
La fenêtre a une propriété AcceptButton. Il suffit de mettre le bouton que tu veux.


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
NikatorS Messages postés 147 Date d'inscription mercredi 18 septembre 2002 Statut Membre Dernière intervention 15 avril 2011
18 avril 2010 à 16:45
Si tu as plusieurs TextBox et donc plusieurs Button tu peux faie ça avec du code.
    Private Sub TextBox1_KeyPress(ByVal sender As System.Windows.Forms.TextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If IsNumeric(e.KeyChar) Or e.KeyChar vbTab Or e.KeyChar vbBack Then
            e.Handled = False
        Else
            e.Handled = True
        End If
        If e.KeyChar = vbCr Then
            Button1_Click(sender, Nothing)
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("Bouton 1")
    End Sub


    Private Sub TextBox2_KeyPress(ByVal sender As System.Windows.Forms.TextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
        If IsNumeric(e.KeyChar) Or e.KeyChar vbTab Or e.KeyChar vbBack Then
            e.Handled = False
        Else
            e.Handled = True
        End If
        If e.KeyChar = vbCr Then
            Button2_Click(sender, Nothing)
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        MsgBox("Bouton 2")
    End Sub



S Nikator
Rejoignez-nous