Accès a la propriété Text d'une TextBox dynamique [Résolu]

Signaler
Messages postés
5
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
23 février 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
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#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
34
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.