Passer d'un textbox a un autre dans une boucle [Résolu]

Signaler
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
-
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
29 septembre 2010
-
Bonjour,

J'ai sur mon winforms, 5 textbox nommé respectivement tb1 ,tb2, tb3, tb4 et tb5
J'aimerai pouvoir les utiliser dans ma boucle for.
Pour pouvoir recuperer le texte contenu dedans.

j'ai essayer avec une variable string tb = "tb"+i;
mais cela n'est pas reconnu apres avec le .Text

Comment puis-je faire ?

Merci d'avance

12 réponses

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
C'est ce que je précisais dans mon deuxieme message...

Pour faire proprement, remplace "TextBox textBox = this.Controls[key];" par :

Control control = this.Controls[key];
if(control != null and control is TextBox)
{
    TextBox textBox = control as TextBox;
}


Working as designed
www.nikoui.fr
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Si jamais tes TextBox sont ajoutés dans un autre control (un panel par exemple) alors remplace "this.Controls" par "leControlContainer.Controls"


Working as designed
www.nikoui.fr
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
Salut,
Tu peux faire une boucle foreach comme ceci:

foreach(Control c in this.Controls)
{
   TextBox tb = c as TextBox;
   if(tb != null)
   {
       string x = tb.Text;
   }
}

<hr />
-My Blog-
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
30 décembre 2007

Le probleme est que je dois encore rajouter d'autre textbox qui eux ne devront pas etre pris en compte.

J'ai teste cette methode et apparement, il ne le fait qu'une fois sans passer par aucun textbox.
Il semble qu'il ne les reconnait pas.

Il me faudrait un moyen de faire utiliser "tb"+i comme nom du textbox pour pouvoir utiliser le .Text

J'avais deja reussi par le passe avec un picturebox mais je n'ai plus le programme concerne
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Tu peux faire comme cela :

            for (int i = 1; i < 6; i++)
            {
                string key = string.Format("tb{0}", i);
                TextBox textBox = this.Controls[key];
            }


Working as designed
www.nikoui.fr
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Petite erreur dans mon message précédent : il faut caster "this.Controls[key]" en TextBox (après avoir vérifié qu'il n'est pas nul évidement ;)


Working as designed
www.nikoui.fr
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
30 décembre 2007

Cela me semble bien mais au moment de la compilation, j'ai une erreur.
Impossible de convertir implicitement System.windows.controls en system.forms.textbox. une conversion explicite existe (un casest-il manquant ?)

Le probleme est que je ne sais pas trop comment on converti explicitemnt en textbox.
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
30 décembre 2007

Je viens de faire la modification, et apparement, la variable control reste à null.
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Comment as tu ajouté tes text box dans ta form ? par le designer ou "par code" ?
Executes tu le bout de code en question dans ta form ? ou ailleur ?
Tes TextBox s'apellent bien "tb1", "tb2", etc (propriété Name du TextBox) ?


Working as designed
www.nikoui.fr
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
30 décembre 2007

J'ai rajouter les textbox par le designer.
Le code est executer directement dans le form où se trouvent les textbox.
Les textbox s'appellent tous tbdvd1, tbdvd2, etc mais j'avais modifier tb{0} par tbdvd{0}
Messages postés
28
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
30 décembre 2007

Merci cela fonctionne parfaitement maintenant
Messages postés
7
Date d'inscription
mardi 4 mai 2010
Statut
Membre
Dernière intervention
29 septembre 2010

Un très grand merci pour cette solution !