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

progbuilder 25 Messages postés lundi 5 mai 2008Date d'inscription 18 avril 2010 Dernière intervention - 15 avril 2010 à 00:02 - Dernière réponse : NikatorS 149 Messages postés mercredi 18 septembre 2002Date d'inscription 15 avril 2011 Dernière intervention
- 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 

13 réponses

Répondre au sujet
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 18 avril 2010 à 12:38
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_GG29
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 15 avril 2010 à 01:10
0
Utile
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
NikatorS 149 Messages postés mercredi 18 septembre 2002Date d'inscription 15 avril 2011 Dernière intervention - 15 avril 2010 à 01:15
0
Utile
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
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 15 avril 2010 à 01:19
0
Utile
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
NikatorS 149 Messages postés mercredi 18 septembre 2002Date d'inscription 15 avril 2011 Dernière intervention - 15 avril 2010 à 07:52
0
Utile
Exacte ! L'évènement KeyPress sera plus simple.


S Nikator
Commenter la réponse de NikatorS
Zayann 75 Messages postés mardi 22 avril 2008Date d'inscription 15 juillet 2015 Dernière intervention - 15 avril 2010 à 16:03
0
Utile
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
progbuilder 25 Messages postés lundi 5 mai 2008Date d'inscription 18 avril 2010 Dernière intervention - 15 avril 2010 à 23:19
0
Utile
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
NikatorS 149 Messages postés mercredi 18 septembre 2002Date d'inscription 15 avril 2011 Dernière intervention - 16 avril 2010 à 08:17
0
Utile
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
progbuilder 25 Messages postés lundi 5 mai 2008Date d'inscription 18 avril 2010 Dernière intervention - 18 avril 2010 à 12:29
0
Utile
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
NikatorS 149 Messages postés mercredi 18 septembre 2002Date d'inscription 15 avril 2011 Dernière intervention - 18 avril 2010 à 13:04
0
Utile
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
progbuilder 25 Messages postés lundi 5 mai 2008Date d'inscription 18 avril 2010 Dernière intervention - 18 avril 2010 à 13:32
0
Utile
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
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 18 avril 2010 à 13:35
0
Utile
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
NikatorS 149 Messages postés mercredi 18 septembre 2002Date d'inscription 15 avril 2011 Dernière intervention - 18 avril 2010 à 16:45
0
Utile
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.