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

Signaler
Messages postés
6
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
13 janvier 2011
-
Messages postés
6
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
13 janvier 2011
-
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

Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
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
Messages postés
6
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
13 janvier 2011

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...
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
La refexion est tellement pratique que quand on la maitrise , tout devient vraiment simple :)
Messages postés
6
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
13 janvier 2011

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.