2010-04-18 4 views
3

j'ai une forme dans laquelle plusieurs boutons sont ajoutés lors de l'exécution par l'intermédiaire d'un « pour » ProcédéModification des propriétés de contrôle qui ont été ajoutés lors de l'exécution

public Form() 
{ 
for (int i = 0 ...) 
    Button b = new Button() 
    b.text = (string) i ; 
    etc.. 
    etc.. 
    } 

. maintenant je souhaite changer la propriété de texte des boutons sur un certain événement. Comment cela peut-il être accompli? J'ai essayé quelques trucs mais aucun n'a fonctionné .. puisque les variables de boutons sont à l'intérieur de la méthode, elles ne sont pas disponibles à l'extérieur.

Merci

Répondre

4

Les variables ne sont pas importantes (bien que vous pouvez les stocker dans un seul champ List<T> si elle a facilité les choses). La manière normale de faire ceci est de regarder à travers la collection Controls (récursivement, si nécessaire).

foreach(Control control in someParent.Controls) { 
    Button btn = control as Button; 
    if(btn != null) { 
     btn.Text = "hello world"; 
     // etc 
    } 
} 

Ce qui précède suppose que tous les boutons ont été ajoutés au même contrôle parent; si ce n'est pas le cas, marcher récursive:

void DoSomething(Control parent) { 
    foreach(Control control in parent.Controls) { 
     Button btn = control as Button; 
     if(btn != null) { 
      btn.Text = "hello world"; 
      // etc 
     } 
     DoSometing(control); // recurse 
    } 
} 
+0

Voilà, c'est comme ça que ça devrait être fait, +1 pour la version récursive. –

+0

ce code est un peu sur ma tête, donc je vais devoir étudier cela un peu. Merci beaucoup! – user257412

+0

@ user257412 - les contrôles sont dans un arbre; les contrôles tels que les panneaux peuvent avoir d'autres contrôles à l'intérieur de ceux-ci, et ceux-ci peuvent également être des contrôles de conteneur. Ce code marche simplement à travers l'arbre à la recherche des boutons. Bien sûr, cela aiderait s'il y avait quelque chose d'évident à identifier * vos * boutons (peut-être le '.Tag'). –

0

Vous pouvez conserver la référence du bouton que vous avez créé à dire que vous pouvez avoir une liste avec tous les contrôles dynamiques ou si elle est seule Faites de l'objet bouton un objet de niveau classe pour pouvoir y accéder n'importe où.

Questions connexes