VS2008 - Comment faire saisir que du numérique dans un textbox [Résolu]

Messages postés
25
Date d'inscription
lundi 5 mai 2008
Dernière intervention
18 avril 2010
- - Dernière réponse : NikatorS
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
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.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_GG29
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
0
Merci
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.
Commenter la réponse de cs_GG29
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
Dernière intervention
15 avril 2011
0
Merci
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
Commenter la réponse de NikatorS
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
0
Merci
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.
Commenter la réponse de cs_GG29
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
Dernière intervention
15 avril 2011
0
Merci
Exacte ! L'évènement KeyPress sera plus simple.


S Nikator
Commenter la réponse de NikatorS
Messages postés
75
Date d'inscription
mardi 22 avril 2008
Dernière intervention
15 juillet 2015
0
Merci
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...
Commenter la réponse de Zayann
Messages postés
25
Date d'inscription
lundi 5 mai 2008
Dernière intervention
18 avril 2010
0
Merci
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
Commenter la réponse de progbuilder
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
Dernière intervention
15 avril 2011
0
Merci
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
Commenter la réponse de NikatorS
Messages postés
25
Date d'inscription
lundi 5 mai 2008
Dernière intervention
18 avril 2010
0
Merci
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?
Commenter la réponse de progbuilder
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
Dernière intervention
15 avril 2011
0
Merci
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
Commenter la réponse de NikatorS
Messages postés
25
Date d'inscription
lundi 5 mai 2008
Dernière intervention
18 avril 2010
0
Merci
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
Commenter la réponse de progbuilder
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
0
Merci
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.
Commenter la réponse de cs_GG29
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
Dernière intervention
15 avril 2011
0
Merci
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
Commenter la réponse de NikatorS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.