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 :

utilisation des Textbox dans une boucle For


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut utilisation des Textbox dans une boucle For
    Bonjour,

    Je cherche à récupérer des valeurs de plusieurs Textbox pour cela j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Dim i As Integer
            For i = 1 To 5
                ma_chaine = Me.Controls(TextBox & CStr(i)).Text
            Next i
    J'obtiens l'erreur suivante :
    'TextBox' est un type et ne peut pas être utilisé en tant qu'expression.
    Merci de m'aider

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    J'imagine que tu fais cela car tes contrôles sont nommé TextBox1, TextBox2, ... ? Auquel cas Textbox devrait être une chaine (entre guillemets). Ceci dit, ce n'est pas la façon la plus propre de procéder...

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par zayoub Voir le message
    Bonjour,

    Je cherche à récupérer des valeurs de plusieurs Textbox pour cela j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Dim i As Integer
            For i = 1 To 5
                ma_chaine = Me.Controls(TextBox & CStr(i)).Text
            Next i
    J'obtiens l'erreur suivante :
    'TextBox' est un type et ne peut pas être utilisé en tant qu'expression.
    Salut,

    Il manque les Guillemets autour de TextBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("TextBox" & CStr(i)).Text
    Edit : arf Er3van plus rapide que moi, le temps de poster, une réponse entre temps XD

    @+
    Mat

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Er3van Voir le message
    J'imagine que tu fais cela car tes contrôles sont nommé TextBox1, TextBox2, ... ? Auquel cas Textbox devrait être une chaine (entre guillemets). Ceci dit, ce n'est pas la façon la plus propre de procéder...
    évidement ! mes TextBox sont nommé Textbox1,Textbox2.... même avec les guillemets ( "Textbox") j'obtiens toujours la même erreur , si vous connaissez une autre méthode je suis prenant . Merci

  5. #5
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Bonjour, il vaut mieux faire comme çà à mon avis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim machaine As String = ""
    For Each ctrl As Control In Me.Controls
        If TypeOf ctrl Is TextBox Then
             Dim textBox As TextBox = CType(ctrl, TextBox)
             machaine = textBox.Text
        End If
    Next

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par matll Voir le message
    Salut,

    Il manque les Guillemets autour de TextBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("TextBox" & CStr(i)).Text
    Edit : arf Er3van plus rapide que moi, le temps de poster, une réponse entre temps XD

    @+
    Mat
    Toujours le même problème en utilisant les guillemets

  7. #7
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Cela m'étonnerait beaucoup que tu aies toujours l'erreur
    'TextBox' est un type et ne peut pas être utilisé en tant qu'expression.
    Tu en as peut-être toujours une, mais pas celle-là.
    As-tu besoin de Cstr() par ailleurs ? A priori son entier sera casté implicitement.

    Citation Envoyé par Gurdil le nain Voir le message
    Bonjour, il vaut mieux faire comme çà à mon avis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim machaine As String = ""
    For Each ctrl As Control In Me.Controls
        If TypeOf ctrl Is TextBox Then
             Dim textBox As TextBox = CType(ctrl, TextBox)
             machaine = textBox.Text
        End If
    Next
    C'est en effet beaucoup plus propre !

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 180
    Points : 4 496
    Points
    4 496
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_chaine = Me.Controls(TextBox & CStr(i)).Text
    Pour moi, il doit aussi manquer le cast: Me.Controls sont des controles et donc pas de propriété .Text

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ma_chaine = Me.Controls(TextBox & CStr(i)).Text
    Pour moi, il doit aussi manquer le cast: Me.Controls sont des controles et donc pas de propriété .Text
    Chez moi ceci fonctionne sans erreur ni avertissement (et Text proposé en auto-complétion) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox(Me.Controls("TextBox1").Text)
    Pour ma culture personnelle, en quoi la solution de Gurdil est-elle plus propre ? est-ce juste en terme d'optimisation car on vient chercher plusieurs TextBox ? Si l'on n'a besoin que d'un TextBox, la méthode initiale est-elle quand même moins bien que celle de Gurdil ?

    Merci

  10. #10
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Citation Envoyé par matll Voir le message
    Pour ma culture personnelle, en quoi la solution de Gurdil est-elle plus propre ? est-ce juste en terme d'optimisation car on vient chercher plusieurs TextBox ? Si l'on n'a besoin que d'un TextBox, la méthode initiale est-elle quand même moins bien que celle de Gurdil ?
    La méthode est plus propre, car elle évite de passer par le nom du contrôle et vérifie bien qu'on a une TexBox...pour être concret imaginons un idiot passant par là et décidant d'inclure une combobox et de la nommer TextBox4...ça va planter sévère

    Et si tu as besoin que d'un textbox, tu vas pas te faire chier à parcourir tes controles, tu vas directement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    machaine = monTexBox.Text

  11. #11
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    Un exemple tout bête , si un jour tu as décide de renommer ton "TextBox1" en "txtNom" par exemple, ton code ne marchera plus à l’exécution... mais par contre il compilera quand même.
    Malgré tout la solution de Gurdil ne fait pas vraiment la même chose que zayoub car elle touche à tous les TextBox du formulaire. Peut être que zayoub à d'autres TextBox8, TextBox9 traités séparément (?)

    Pascal

  12. #12
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Citation Envoyé par _PascalC_ Voir le message
    Malgré tout la solution de Gurdil ne fait pas vraiment la même chose que zayoub car elle touche à tous les TextBox du formulaire. Peut être que zayoub à d'autres TextBox8, TextBox9 traités séparément (?)
    Ah ce moment là, je vois pas l'intérêt de passer par une boucle, autant récupérer les textes directement avec les instances de textbox.

  13. #13
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    pour être concret imaginons un idiot passant par là et décidant d'inclure une combobox et de la nommer TextBox4...ça va planter sévère
    même pas en plus , car la propriété ".Text" vient de la classe "Control" dont héritent tous les contrôles graphiques .NET.
    Mais bon l'idée est bien là

    Pascal

  14. #14
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 151
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par Gurdil le nain Voir le message
    La méthode est plus propre, car elle évite de passer par le nom du contrôle et vérifie bien qu'on a une TexBox...pour être concret imaginons un idiot passant par là et décidant d'inclure une combobox et de la nommer TextBox4...ça va planter sévère

    Et si tu as besoin que d'un textbox, tu vas pas te faire chier à parcourir tes controles, tu vas directement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    machaine = monTexBox.Text
    lol, c'est vrai qu'on peut faire simple pour un seul TextBox

    Citation Envoyé par _PascalC_ Voir le message
    Un exemple tout bête , si un jour tu as décide de renommer ton "TextBox1" en "txtNom" par exemple, ton code ne marchera plus à l’exécution... mais par contre il compilera quand même.
    Malgré tout la solution de Gurdil ne fait pas vraiment la même chose que zayoub car elle touche à tous les TextBox du formulaire. Peut être que zayoub à d'autres TextBox8, TextBox9 traités séparément (?)

    Pascal
    En effet merci à tout les deux.

  15. #15
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu n'en veux qu'une, oui, tu cherches par ID.

    Là ce n'est pas le cas, on cherche finalement TOUTES les Textbox, bien qu'il se trouve que par "chance" (pour ne pas dire absence de normalisation) elles portent des noms proches.
    Si demain tu as une Textbox qui s'appellent "CustomerCriteriaTextBox", et bien la première méthode ne marcherait plus, alors que l'autre est générique.

  16. #16
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Citation Envoyé par _PascalC_ Voir le message
    même pas en plus , car la propriété ".Text" vient de la classe "Control" dont héritent tous les contrôles graphiques .NET.
    Mais bon l'idée est bien là

    Pascal
    Ah ouais pas faux

  17. #17
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 180
    Points : 4 496
    Points
    4 496
    Par défaut
    Le mieux ne serait pas de mettre toutes les TextBox dont on doit récupéré la valeur sur un panel et de parcourir les controls de ce panel?

  18. #18
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    Ah ce moment là, je vois pas l'intérêt de passer par une boucle, autant récupérer les textes directement avec les instances de textbox.
    Tout pareil
    Eventuellement on pourrait imaginer isoler les 5 (ou n) TextBox dans un Panel et reprendre ton code en changeant que ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each ctrl As Control In Me.MonPanel.Controls
    ...
    ...
    Comme ça même si il y a d'autres TextBox dans le formulaire on ne touchera qu'à ceux qui nous intéressent pour le traitement.

    Pascal

  19. #19
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    A mais on est bien d'accord, ça serait mieux.
    Et aussi leur donner des noms avec une sémantique derrière...

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par _PascalC_ Voir le message
    Un exemple tout bête , si un jour tu as décide de renommer ton "TextBox1" en "txtNom" par exemple, ton code ne marchera plus à l’exécution... mais par contre il compilera quand même.
    Malgré tout la solution de Gurdil ne fait pas vraiment la même chose que zayoub car elle touche à tous les TextBox du formulaire. Peut être que zayoub à d'autres TextBox8, TextBox9 traités séparément (?)

    Pascal
    en fête je veux récupérer les valeurs de "certaine" Textbox et les insérer dans un tableau, j'ai nommé ces TextBox par ordre ascendant (Textbox5 ..... Textbox60) c'est pour ça que j'ai utiliser une boucle For

Discussions similaires

  1. Utilisation de condition dans une boucle for-each
    Par siro1 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 09/03/2012, 17h07
  2. Récupération des données dans une boucle for
    Par boubounagh dans le forum Interfaces Graphiques en Java
    Réponses: 22
    Dernier message: 24/10/2011, 16h29
  3. [PHP 5.3] Tester des conditions dans une boucle for
    Par coulane dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2010, 11h50
  4. Utiliser un pas dans une boucle For .. to .. do
    Par colorid dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2009, 11h09

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