IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

interdire les valeurs non numériques dans les textbox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Par défaut interdire les valeurs non numériques dans les textbox
    Bonjour à tous

    Je viens juste de migrer depuis VB6 vers visual basic 2012. Déjà que je n'étais que débutant en VB6 je rame pas mal en VB.net

    J'ai trouvé ce code dans les FAQ du site :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Private Sub Text1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
    Handles Text1.KeyPress
     
            If Not Char.IsDigit(e.KeyChar) Then
                'Tous les caractères non numériques ne sont pas traités sur le TextBox.
                e.Handled = True
            End If
     
        End Sub
    Le problème est que si je veux saisir une valeur avec des décimales impossible de taper le point et je suppose que cela doit être pareil pour ceux qui utilisent la virgule.
    Merci pour votre aide...

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Utilisez le contrôle NumericUpDown à la place du TextBox.
    On peut indiquer le nombre de décimales voulues avec la propriété DecimalPlaces.

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    En faisant une petite recherche sur le forum vous trouverez pas mal de chose mais le mieux reste d'utiliser le contrôle qui est prévu pour comme le suggère rv26t

  4. #4
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2012
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 317
    Par défaut
    Merci pour cette réponse rapide. Comme toujours trop presser j'ai fais pas mal de travail avec mes maigres connaissances sans savoir qu'il existait un contrôle de type numérique. J'ai donc formater les textbox pour que les valeurs calculées de type double soient "présentables" et je voulais , pour perfectionner, interdire les saisies non numériques. Souvent les erreurs viennent du séparateur de décimal selon la configuration de windows. Je vais régler le problème avec un msgbox qui énervera un peu l'utilisateur mais pour la suite je vais essayer d'utiliser ce nouveau contrôle qui me semble bien pratique

    encore merci pour vos réponses

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Citation Envoyé par dmoluc Voir le message
    Je vais régler le problème avec un msgbox qui énervera un peu l'utilisateur
    Des solutions existent comme vous vouliez le faire (voir lien dans mon précédent message) comme celle-ci :
    Citation Envoyé par Graffito Voir le message
    Pas de solution directe via une propriété du TextBox.
    Sinon : http://msdn.microsoft.com/fr-fr/library/ms229644.aspx
    et je pense qu'il faut en plus désactiver le copier-coller .

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Des solutions existent comme vous vouliez le faire (voir lien dans mon précédent message) comme celle-ci :
    Envoyé par Graffito
    Pas de solution directe via une propriété du TextBox.
    Sinon : http://msdn.microsoft.com/fr-fr/library/ms229644.aspx
    et je pense qu'il faut en plus désactiver le copier-coller .
    Il faut gérer un élément supplémentaire au niveau du séparateur sinon l'utilisateur peut en saisir plusieurs.
    Dans la classe rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Private Sep As Boolean = True ' pour permettre un seul séparateur
    à la fin de la procedure OnKeyPress
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            ' autoriser un seul séparateur
            If keyInput.Equals(decimalSeparator) Then Sep = False
        End Sub
    Dans le test backspace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            ElseIf e.KeyChar = vbBack Then
                ' si le séparateur est supprimé, autorisé de nouveau sa saisie
                If Not (Me.Text).Contains(decimalSeparator) Then Sep = True
    Reste encore à gérer le del sur le séparateur


    [Edit]
    J'avais oublié de mettre la modif sur le test du séparateur ((...) and sep Then)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            ElseIf (keyInput.Equals(decimalSeparator) OrElse keyInput.Equals(groupSeparator) OrElse keyInput.Equals(negativeSign)) And Sep Then
                ' Decimal separator is OK
    A+,Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/04/2012, 09h56
  2. Ajouter une variable non numérique dans les données
    Par Zouzoune dans le forum SAS Base
    Réponses: 15
    Dernier message: 25/08/2011, 08h05
  3. Réponses: 2
    Dernier message: 27/07/2011, 12h16
  4. Réponses: 4
    Dernier message: 09/04/2009, 13h32
  5. Garder les valeurs non nulles dans une matrice
    Par mfontan dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/04/2009, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo