Objet variable créé à partir d'un chaine de caracteres ??????

oscar974 Messages postés 6 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 13 janvier 2011 - 27 mars 2010 à 11:37
oscar974 Messages postés 6 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 13 janvier 2011 - 28 mars 2010 à 14:27
Bonjour.

Je me forme avec Visual Studio en C#.
J'ai une variable chaine de caractère : nomCouleur et je souhaite créer à l'exécution des objets d'une classe définie qui s'appelle comme nomCouleur.


Peut-être ceci peut vous aider à mieux comprendre :

nomCouleur = new System.Windows.Forms.label () ;

nomCouleur = "jaune"
ou
nomCouleur = "violet"
ou
nomCouleur = "rougeFonce"

Cela ne marche pas car nomCouleur est une chaine de caractère et pas un objet.
Pourtant l'objet doit s'appeler du nom de la couleur.
C'est cet aspect dynamique qui m'intéresse.
Là je suis à cours d'inspi alors si quelqu'un peut me dn coup donner un coup de main, ce serait bien cool.
Ciao.

4 réponses

yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 7
27 mars 2010 à 13:32
salut

essais un truc comme ca :

using System.Reflection;

class test
{
    public Label jaune = new abel() ;
    public Label violet = new Label() ;
    public Label rouge = new Label() ;
}

// creation de la class
test mytest = new test();

// recuperation du type;
Type t = mytest.GetType();

// invoquation du membre "jaune" 
Object o = t.InvokeMember("jaune", BindingFlags.Public | BindingFlags.GetProperty, null, mytest, null);
((Label)o).Text = "je suis jaune";

o = t.InvokeMember("violet", BindingFlags.Public | BindingFlags.GetProperty, null, mytest, null);
((Label)o).Text = "je suis violet";

o = t.InvokeMember("rouge", BindingFlags.Public | BindingFlags.GetProperty, null, mytest, null);
((Label)o).Text = "je suis rouge";



la j'utilise la refexion pour retrouver les differents enfant de la class test
0
oscar974 Messages postés 6 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 13 janvier 2011
27 mars 2010 à 18:20
Merci pour ta réponse !
ça fait plusieurs fois que j'en reviens à la réflexion dans mes recherches et là toi aussi...je crois que j'ai plus le choix, il va falloir que :
1 - j'essaye de comprendre parce que je ne suis encore qu'un débutant et que je trouve ça plutôt compliqué...
2 - je teste cette solution.

Merci encore, je m'y remets...
0
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 7
27 mars 2010 à 18:23
La refexion est tellement pratique que quand on la maitrise , tout devient vraiment simple :)
0
oscar974 Messages postés 6 Date d'inscription samedi 19 décembre 2009 Statut Membre Dernière intervention 13 janvier 2011
28 mars 2010 à 14:27
Encore moi...alors quand j'exécute le code que j'ai retranscrit le debugueur s'arrête sur cette partie du code :

Object o = t.InvokeMember("jaune", BindingFlags.Public | BindingFlags.GetProperty, null, this, null);

et me donne comme message :

Méthode 'EssaiReflexion1.FormActiver.jaune' introuvable.

"FormActiver" est la classe que toi tu appelais "test" et le this de la formule du dessus s'y rapporte. "EssaiReflexion1" est le namespace.

Je me demande ce que vient faire cette méthode la dedans étant donné que ce que je veux ce sont des objets variables .

En tout cas si tu as un nouveau conseil,
merci d'avance,
ciao.
0
Rejoignez-nous