Lister tous les textbox d'une form [Résolu]

babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 23 déc. 2006 à 16:37 - Dernière réponse : babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention
- 26 déc. 2006 à 15:25
Bonjour,

J'aimerai pouvoir lister tous les textbox d'une form pour les modifier dynamiquement (jusque là c'est ok) sachant que certains textbox se trouve dans des panels ou des tableLayoutPanel (là ca ne va plus...). 
lorsque j'utilise l'instruction "foreach (Control c inthis.Controls)"  je
constate que je ne traite que les contrôles directement sur la form (ce qui après réflexion me semble normal)...
Y a t il un moyen simple de lister toutes mes textbox (même ceux non directement sur la form). Je n'ai pas très envie de faire des boucles foreach sur chaque "conteneur" et je ne suis pas assez bon pour faire une petite méthode récursive... 
Afficher la suite 

8 réponses

Répondre au sujet
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 23 déc. 2006 à 16:54
+3
Utile
Bingo : http://www.csharpfr.com/infomsg_WINFORM-CONTROLES-DYNAMIQUES_537180.aspx

/*
coq
MVP Visual C#
CoqBlog
*/
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 26 déc. 2006 à 15:18
+3
Utile
Tu peux utiliser l'opérateur typeof.

En partant du principe que tu utilises le contrôle TextBox standard :
tabc = FindAllControlForOneType(this, typeof(TextBox), tabc);

/*
coq
MVP Visual C#
CoqBlog
*/
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 23 déc. 2006 à 16:50
0
Utile
Salut,

Pas d'autre moyen que de parcourir l'ensemble des contrôles consteneurs du formulaire.
Pour ce qui est de la petite méthode qui va bien, on l'a donner plusieurs fois sur le forum, tu devrais la retrouver rapidement (elle se nommait peut être FindControl il me semble)

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 23 déc. 2006 à 21:25
0
Utile
Salut, il faudra tout de même la modifier un peu car ma fonction cherche un contrôle par son nom et toi tu veux lister les contrôles par leur type.

if ( ctrl is TextBox )
   // Add...

Coq, j'en profite pour répondre à ton MP, ma fonction est obsolète depuis .NET 2.0 :

this.Control.ControlCollection.Find( key, searchAllChildren );
Commenter la réponse de Lutinore
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 23 déc. 2006 à 22:58
0
Utile
Chouette, je savais bien que j'avais oublier un ajout mais j'ai vérifier sur Control, pas sur ControlCollection -_-

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 23 déc. 2006 à 23:00
0
Utile
D'ailleurs si j'en crois la coloration syntaxique du premier post, babe59 pourra directement se servir de celle là :p

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 26 déc. 2006 à 14:06
0
Utile
Si j'ai bien compris, le ControlCollection.Find ne correspond pas à ma demande (je ne fais pas une recherche par nom mais par type...).
Par contre le lien que tu m'a donné correspond très bien à ce que je veux faire (moyennant un toute petite adaptation).
J'ai toutefois encore une petite chose qui m'embête. Voici tout d'abord le source :

Appel ----------------
ArrayList tabc = newArrayList();
tabc = FindAllControlForOneType(this, textBox1.GetType(), tabc);
foreach (Control c in tabc)
...

Méthode -----------------------------
publicArrayList FindAllControlForOneType(Control parent, Type type, ArrayList tabCtrl)
{
   foreach (Control child in parent.Controls)
   {
      if (child.GetType() == type)
         tabCtrl.Add(child);
      else
         tabCtrl = FindAllControlForOneType(child, type, tabCtrl);
   }
   return tabCtrl;
}

Question ---------------------
Lors de l'appel ne n'arrive pas à passer directement le type que je veux tester (dans l'exemple, je veux retrouver toutes les textbox et passe donc une textBox au hasard pour récupérer son type)...
Au passage n'hésitez pas à critiquer le source si nécessaire
Merci
DT
Commenter la réponse de babe59
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 26 déc. 2006 à 15:25
0
Utile
Merci  !

DT
Commenter la réponse de babe59

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.