Appeler des objets en créant les noms dynamiquement [Résolu]

Messages postés
9
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
9 septembre 2008
- - Dernière réponse : cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
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.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
3
Merci
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-

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
3
Merci
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-

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
0
Merci
J'ajouterais que 80 TextBox sur une form => faut revoir ton programme au niveau de la conception

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Messages postés
9
Date d'inscription
lundi 4 avril 2005
Statut
Membre
Dernière intervention
9 septembre 2008
0
Merci
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
Commenter la réponse de deejay2221