Appeler des objets en créant les noms dynamiquement

Résolu
deejay2221 Messages postés 9 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 9 septembre 2008 - 7 mars 2007 à 22:37
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 8 mars 2007 à 00:14
Bonjours

J'ai un programme avec 81 textbox. J'aimerais bien être capable d'appeler chacun des textbox en créant le nom dynamiquement.
Par exemple, au lieu de faire:

if (case1.Text != "")
{
   case1.locked = true;
}
if (case2.Text != "")
{
   case2.locked = true;
}
// (ainsi de suite, pour chaque case, ce qui est très long et redondant)

je voudrais être capable de faire (exemple)

for (int i = 0; i != 81; ++i)
{
   (nom) case = "case" + i; // exemple...
   if (case.Text != "")
   {
      case.locked= true;
   }
}
// Ne prend que quelques lignes et est moins long pour les corrections

Je sais que le code n'a aucun sens mais c'est seulement pour que vous puissiez comprendre ce que je veux dire.
Je ne sais pas non plus si ça ce fait en C# mais j'ai déjà vu des langages (javascript je crois) qui pouvais le faire.

Merci en avance.

4 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 mars 2007 à 23:10
Salut,
Ca ne marche pas comme ça

Ce que tu peux faire par exemple, c'est itérer dans ta collection de TextBox avec un foreach et regarder le contenu du texte:

foreach(Control c in this.Controls)
{
   TextBox txt = c as TextBox;
    if(txt != null && txt.Text != String.Empty)
   {
      txt.Locked = true;
   }
}

<hr />
-Blog-
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 mars 2007 à 00:14
Je pense que tu n'as pas du regarder le code que je t'ai mis plus haut...
Il marche avec les Textbox sans problème, essayes tu verras.

Sinon, si tu fais un jeu du sue du cul, hé bien... t'aurais largement meilleur temps de tout dessiner avec des graphics, parce que si tu fait un Control par case, niveau performance ça va pas être le pied...

<hr />
-Blog-
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 mars 2007 à 23:10
J'ajouterais que 80 TextBox sur une form => faut revoir ton programme au niveau de la conception

<hr />
-Blog-
0
deejay2221 Messages postés 9 Date d'inscription lundi 4 avril 2005 Statut Membre Dernière intervention 9 septembre 2008
7 mars 2007 à 23:41
En fait ce que je fais c'est un jeu de sudoku alors il faut absolument les 81 cases

En ce moment, itérer dans la collection d'objet avec un
foreach (Control c in Controls)
c'est ce que je fais. Le problème est que les propriétés que je peux utiliser sont limités à ceux de base (propriété communes à tous les contrôles). C'est logique puisque on boucle sur tous les contrôles et non tous les TextBox, donc je n'ai pas accès aux proprités propres aux textbox (tel que locked)

Ce qui serait utile en fait c'est d'avoir un
foreach (Textbox t in (qqchose))
{
   // ...
}
si c'est faisable, encore une fois

Merci
0
Rejoignez-nous