J'ai une zone de texte créée dynamiquement (création d'exécution) dont le nom est disponible sous forme de chaîne. Ce que je veux faire est d'accéder à cette zone de texte comme nous le faisons en tant que textes normaux. solutionComment accéder à une zone de texte créée dynamiquement en C# dont le nom est disponible en chaîne?
Comment accéder à une zone de texte créée dynamiquement en C# dont le nom est disponible en chaîne?
Répondre
En plus de la réponse de Iordan, si vous ne savez pas exactement où sur votre formulaire la zone de texte est, alors cette méthode d'extension devrait aider beaucoup. Remarque, Form
hérite de Control
quelque part en bas de la piste, de sorte que vous pouvez l'appeler à partir de cela, ou n'importe quel contrôle sur votre formulaire.
public static class ExtensionMethods
{
public static Control FindControl(this Control root, string name)
{
foreach (Control c in root.Controls)
{
// Check this control
if (c.Name == name) return c;
// Check this controls subcontrols
Control tmp = c.FindControl(name);
if (tmp != null) return tmp;
}
return null;
}
}
Si cette encore est pas assez souple pour vous, alors vous pouvez parcourir System.Windows.Forms.Application.OpenForms
Si vous connaissez le nom de la zone de texte et de ses contrôles parents, vous pouvez faire comme ceci:
TextBox tb = (TextBox)parent.Controls["name"];
Puisque vous semblez avoir un contrôle sur le processus de création, a mis une référence dans un dictionnaire.
TextBox txt = DynamicCreate(name);
map[name] = txt;
this.Controls.Add(txt);
Tout ce que vous avez à faire est de le rechercher dans votre dictionnaire, au lieu de faire défiler tous les contrôles du formulaire.
TextBox txt = map ["nom"];