Accès a la propriété Text d'une TextBox dynamique

Résolu
bgcode
Messages postés
5
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
23 février 2007
- 28 juin 2005 à 14:46
cs_coq
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
- 30 juin 2005 à 23:36
private void button2_Click(object sender, EventArgs e)

{

nb=nb_champs.Text;

nombre=Convert.ToInt32(nb);

for (int i = 0; i < nombre; i++)

{


champ = new TextBox(); //Instanciation


label = new Label(); //Instanciation




champ.Location = new Point(100, hauteur + (20 * i)); // 100 px au bord
du panel


label.Location = new Point(10, hauteur + (20 * i)); // 100 px au bord
du panel




champ.Name = "champ" + i;

label.Name = "label" + i;




champ.Size = new Size(110, 20); // 110 * 20

label.Size = new Size(80, 20);



champ.Text = "";

label.Text = "Champ n° " + i;




table.ActiveForm.Height += 20; // On augmente la taille de la forme
pour pas que ca despasse ;)

panel1.Height += 20;



this.panel1.Controls.Add(champ);

this.panel1.Controls.Add(label);



}

//
(String)this.GetType().GetProperty("champ3").GetValue(this, null));

// MessageBox.Show(

}





Bonjour , a la sortie de cette fonction , je n'arrive pas a acceder a
la propriété text de mes champs(textbox) crées dynamiquement en
fonction d'une valeur rentrée dans une autre textbox.

Pourriez vous m'aider svp.

Merci beaucoup.

2 réponses

cs_coq
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
99
30 juin 2005 à 23:36
Salut,

Déjà pour récupérer "champ3" tu devrais, en "temps normal", utiliser GetField et non GetProperty.
Mais comme là tu crées dynamiquement tes textbox tu ne peux pas utiliser la reflection sur la classe de ton formulaire, les textbox n'étant pas définis dans le code.

Tu dois donc parcourir la collection de controle de ton controle conteneur ou simplement maintenir ta propre collection.

Exemple : tu ajoutes une HashTable "texteBoxes" et dans ta boucle tu fais :
this.panel1.Controls.Add(champ);
this.panel1.Controls.Add(label);
// ajout du TextBox à la liste avec comme clé son nom
textBoxes.Add(champ.Name, champ);

Ensuite pour accèder à la propriété Text :
string texte = ((TextBox)textBoxes["champ3"]).Text;

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
42
28 juin 2005 à 15:51
Salut, tu devrais conserver les références de tes textbox dans un tableau, l'index de position du textbox correspondra à son ordre de creation.. Sinon tu peux retrouver tes textbox dans la propriété Controls de ton Panel, le dernier objet est inséré à la fin de la collection.
0