WinForm : Contrôles dynamiques

Résolu
Drix78 Messages postés 5 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 2 février 2006 - 16 août 2005 à 14:20
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 21 août 2005 à 18:01
Bonjour,

étant un habitué des WebForm, je souhaiterai retrouver des contrôles textbox créés dynamiquement en WinForm après une saisie de l'utilisateur.
Visiblement, il n'y a pas de méthode du type FindControl(string sControlID) comme en WebForm

Comment puis-je retrouver mes petits facilement ?
Peut-être y a-t-il un contrôle plus simple à utiliser pour générer une liste de champs de saisie en fonction d'une constante ??

Exemple du code utilisé pour la génération des contrôles dynamiques :

...
private
const
int NB_MAX_NUMBERS = 10;

...



public Form1()
{
InitializeComponent();

for(
int i = 1; i < NB_MAX_NUMBERS+1; i++)
{

TextBox TB =
new TextBox();
TB.Location =
new System.Drawing.Point(10, (i*20)+2);
TB.Height = 20;
TB.Width = 70;
TB.MaxLength = 9;
TB.Name =
"tbTel"+ i.ToString();
TB.Text =
"6";

this.Controls.Add(TB);

}
}

Merci de votre aide

Drix78

5 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 août 2005 à 14:36
la solution est simple : stocke la référence de chaque contrôle dans une Hashtable comme ceci :


private Hashtable mesTextBox;
public Form1()
{
InitializeComponent();
mesTextBox = new Hashtable();

for(
int i = 1; i < NB_MAX_NUMBERS+1; i++)
{

TextBox TB =
new TextBox();
TB.Location =
new System.Drawing.Point(10, (i*20)+2);
TB.Height = 20;
TB.Width = 70;
TB.MaxLength = 9;
TB.Name =
"tbTel"+ i.ToString();
mesTextBox.Add("tbTel"+ i.ToString(), TB);

TB.Text = "6";

this.Controls.Add(TB);

}
}

et tu retrouves ton TextBox de cette manière :
(TextBox)mesTextBox["tbTel1"]


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 août 2005 à 00:01
Salut,

Pour approfondir la solution proposée par Lutinore : il faut aussi penser a parcourir l'éventuelle collection de contrôles de chaque contrôle (et ainsi de suite...) : ton contrôle peut tres bien se trouver dans un groupbox (par exemple) et ainsi il ne sera pas directement dans la collection de contrôles du formulaire mais dans celle du groupbox :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 août 2005 à 18:01
Ok j'ai tenu compte de cette judicieuse remarque : )

// On peut passer une forme bien sûr !
public Control FindControl( Control parent, string name )
{
if ( parent.Name == name )
return parent;


Control ctrl;


foreach ( Control child in parent.Controls )
{
if ( ( ctrl = FindControl( child, name ) ) != null )
return ctrl;
}


return null;
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
16 août 2005 à 16:44
Salut,

private Control FindControl( string name )
{
foreach( Control ctrl in this.Controls )
{
if ( ctrl.Name == name ) // Ou Tag.
return ctrl;
}


return null; // Ou Exception.
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Drix78 Messages postés 5 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 2 février 2006
16 août 2005 à 16:49
Merci à vous deux pour ces deux solutions !

Drix78
0
Rejoignez-nous