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 :

Vérifier si groupe de textbox sont vides


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Par défaut Vérifier si groupe de textbox sont vides
    Bonjour ! Je pense mon problème assez simple, je n'ai juste pas la bonne formulation. Je m'explique.

    J'ai pas mal de Textbox dans mon form. J'ai une fonction qui me permet de vérifier s'ils sont "IsNumeric" ou pas. Si pas "IsNumeric" > msgbox(err).

    Jusque là ça va. Mais je me suis aperçu qu'il me mettais aussi une erreur si le/les textbox étaient vides. Donc vide pour lui c'est idem que pas "IsNumeric".

    Voici ma fonction très pratique : (qui marche bien!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function IsAllTextBoxNumeric(ByVal conteneur As Control)
            Dim i As Integer
            For Each txt As TextBoxBase In conteneur.Controls.OfType(Of TextBoxBase)()
                Try
                    If Not Double.TryParse(txt.Text, i) Then Return False
                Catch
                End Try
            Next
            Return True
        End Function
    Comment est ce que je pourrai la modifier / ajouter pour qu'il me laisse tranquille si le textbox est vide ?
    Parce que ça par exemple ça ne fonctionne pas : (oui je fais beaucoup de feeling...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function IsAllTextBoxNumeric(ByVal conteneur As Control)
            Dim i As Integer
            For Each txt As TextBoxBase In conteneur.Controls.OfType(Of TextBoxBase)()
                Try
                    If Not Double.TryParse(txt.Text, i) Or Not Nothing.TryParse(txt.Text, i) Then Return False
                Catch
                End Try
            Next
            Return True
        End Function
    Et du coup mon code appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ElseIf Not IsAllTextBoxNumeric(Panel_controlX) Then
              MsgBox("Il y a des entrées non numériques, veuillez vérifier.")

    Merci !

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour Adakhum,

    Dans ta boucle tu peux inclure une conditionnelle du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If txt.Text = String.empty Then
        Continue For
    End If
    A+

  3. #3
    Membre confirmé Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Par défaut
    Et bien en fait je crois que j'ai réussi à résoudre mon problème ...

    Si je met ça à l'air correct ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function IsAllTextBoxNumeric(ByVal conteneur As Control)
            Dim i As Integer
            For Each txt As TextBoxBase In conteneur.Controls.OfType(Of TextBoxBase)()
                Try
                    If Object.Equals(txt.Text, "") Then Return True
                    If Not Double.TryParse(txt.Text, i) Then Return False
                Catch
                End Try
            Next
            Return True
        End Function
    EDIT : Nan, en fait je croyais que ça marchait au début mais ça continue de déconner, j'essaie ta solution Wallace

  4. #4
    Membre confirmé Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Par défaut
    En fait je ne comprend pas pourquoi ça ne marche pas .. Avec ce code par exemple, si je rentre un vide il me met le msgbox, et il me met aussi le msgbox si je rentre une lettre et aussi un chiffre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function IsAllTextBoxNumeric(ByVal conteneur As Control)
            Dim i As Integer
            Dim bool As Boolean
            For Each txt As TextBoxBase In conteneur.Controls.OfType(Of TextBoxBase)()
                Try
                    If Not Double.TryParse(txt.Text, i) Then bool = False   ' si c'est une lettre ou un vide > bool = false mais on test quand même la ligne suivante !
                    If txt.Text = String.Empty Then Return True   ' si c'est un vide, ça devrait renvoyer "True" et la fonction est quittée ! et ça ne le renvoie pas ... 
                    If bool = False Then Return False  ' si ce n'était pas non plus un vide ça retourne false car c'était bien une lettre ..
                Catch
                End Try
            Next
            Return True
        End Function
    Est ce que mes commentaires sont théoriquement bon ?

    Rappel Code appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ElseIf Not IsAllTextBoxNumeric(PL_TS_MD) Then
              MsgBox("Il y a des entrées non numériques, veuillez vérifier.")

    EDIT : en fait, quand je met ça par exemple : If Textbox.Text = "" Then Exit Sub et que j'effectue un pas à pas détaillé pour voir ce qui se cache, s'il n'y a rien dans le textbox, il ne fait pas "Exit Sub" je ne comprend pas ? Rien c'est bien "" ? !

  5. #5
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Ce qu'i serait bon d es avoir c'est déclenches-tu ta sub IsAllTextBoxNumeric depuis un gestionnaire d’événement :

    - des textbox en question ?
    - un bouton (au clic en guise de vérification) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EDIT : en fait, quand je met ça par exemple : If Textbox.Text = "" Then Exit Sub et que j'effectue un pas à pas détaillé pour voir ce qui se cache, s'il n'y a rien dans le textbox, il ne fait pas "Exit Sub" je ne comprend pas ? Rien c'est bien "" ? !
    Rien = Nothing
    Vide = Empty

    Ce sont 2 choses différentes qui doivent être traitées indépendamment !

  6. #6
    Membre confirmé Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Ce qu'i serait bon d es avoir c'est déclenches-tu ta sub IsAllTextBoxNumeric depuis un gestionnaire d’événement :

    - des textbox en question ?
    - un bouton (au clic en guise de vérification) ?
    Depuis le changement de texte d'un panel encadrant des textbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            For Each txt As TextBoxBase In conteneur.Controls.OfType(Of TextBoxBase)()
                AddHandler txt.TextChanged, AddressOf PL_TG_MD_TextChanged
            Next
        End Sub
    En fait la difficulté c'est vraiment de cerner toutes les textbox en même temps, car du coup si dans l'une par exemple j'ai un vide, puis dans la suivante j'entre une lettre, il va quand même me dire que ça va bien parce que dans l'autre textbox j'ai rentrer un vide mais je lui ai dit que c'était "pas grave" (je me comprend ^^)

    EDIT : Ici j'ai réussi à programmer pour UNE textbox le code et surtout le résultat que je souhaiterai obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub TB_traverse_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TB_traverse.TextChanged
            Dim i As Int16
            If TB_traverse.Text = String.Empty Then Exit Sub
            If Not Double.TryParse(TB_traverse.Text, i) Then MsgBox("Il y a des entrées non numériques, veuillez vérifier.")
        End Sub
    Reste plus qu'a le généraliser aux panel avec l'événement text_changed ..
    Merci pour ton aide wallace1

  7. #7
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Et pourquoi ne pas créer une extension du contrôle Textbox ? Je propose ce genre d e contrôle ici :

    http://3dotdevcoder.blogspot.fr/2014...e-textbox.html


    ...Car à force ça risque d'être difficilement maintenable ton code !

    PS : il faut savoir qu'en DotNet nous n'inventons plus rien tout a déjà été fait.

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 01/07/2013, 15h03
  2. [Débutant] Vérifier colonne d'une ligne datagridview sont vide
    Par shaun_the_sheep dans le forum C#
    Réponses: 3
    Dernier message: 20/11/2012, 09h50
  3. Vérifier si des champs sont vides
    Par Colbix dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/08/2007, 19h36
  4. Group by, jointure, élément vide
    Par Tan dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/11/2004, 13h48
  5. Selection de Groupes ki ne sont pas sous groupes...
    Par superdada dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/07/2003, 14h42

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