Bon voila...Je suis un peu ambitieux mais bon je tente kememe..
Matos : C#
J'aimerais savoir si il y a une fonction système qui permet de récupérer une variable grâce à son nom en String???
Dacord je vous fait un pti exemple...meme pt 2...
Appelons cette fonction mystérieuse FctMagique
avec comme prototype : Object FctMagique(String)
int a=5;
......
et dans le code par exemple :
((int)FctMagique("a"))=12;
Et un autre exemple ca fait pas de mal...
Label Label1;
Label Label2;
Label Label3;
for (int i=1;i<4;i++) ((Label)FctMagique("Label"+i.ToString())).Text="Ceci est le Label " + i.ToString();
Voila je crois que le dernier est un peu plus parlant...
Je vais pas dire qu'une solution serait vital mais.....vraiment presque...car j'ai environ 40 Labels.....alors imaginez...
Ah oui derniere remarque...Bien sur la solution serait de passer carrement par un Tableau d'Object mais vu les circonstances je ne peux pas alors c'est pour ca qu'il me faudrait cette fonction magique
Il n'y a vraiment que cette solution pour me sauver la vie alors...si un expert passe par la...
Un grand merci, voir meme une ola pour celui qui trouvera la solution !!!
for (int i=1;i<=4;i++) ((Label)this.FindControl("Label" + i.ToString())).Text="coucou cest le label " + i.ToString();
...
Par contre pour avoir la liste je galere encore un peu...
///////////////////////////////////////
Par contre ca ma donner une idée pour cette fonction magique!Surtt pour la version C++!
Etant donner que la ce sont des classes imbriqués ce sont forcement des listes de types à l'intérieur.
Donc il faut forcement les stocker et faire la correspondance entre les noms et le control
DONC! Ben comme en C++ il n'y a que des types primitifs, ben pour que ca marche il suffit de créer la meme chose quand C# avec les controls
Cest a dire un tableau qui fait la correspondance entre les nom(string) et les variables (Pointeur)
Du style :
List<String,void*> LstCrtl =new List<String,void*>;
int a=5;
String huhu="je suis la !";
...
LstCrtl.add("a",&a);
LstCrtl.add("huhu",&huhu);
...etc
enfin ce n'est qu'une idée apres pour le code, il faut poffiner un peu...
Une petite boucle sur tous les contrôles de ta feuille permet d'en
extraire les labels (à condition, dans l'exemple ci-dessous, que leurs
noms soient label1, label2, label3, ... )
String indice = "";
foreach (Control ctrl in this.Controls)
{
if (ctrl.Name.Substring(0, 5) == "label")
{
indice = ctrl.Name.Substring(5);
ctrl.Text = "Je m'appelle Label" + indice;
}
}
Manu
--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
Arf!!
Presque!
ouais c'est ca que je veux!
C'est vrai que je n'y avait pas penser étend donnée que je suis dans une classe qui hérite et qui hérite encore.........
Mais le problème est que je suis en ASP.NET
du coup...yorai moyen de l'adapter??
Car dans le type control, il n'y a pas de methode name, et en fesant la liste je n'est rien trouver...
Alors, tente ta question sur le forum d'
ASPFr.com
Là, je bloque aussi.
Manu
--------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
J'arrive en retard, juste pour indiquer qu'il existe un moyen relativement simple de récupérer la valeur d'une variable à partir de son nom en utilisant la réflection :
<hr />
// myType est le type dans lequel la variable recherchée est définie
// (obtenu par typeof() ou .GetType())
FieldInfo field = myType.GetField("variableName", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (field != null)
{
// Si le champ est statique
object val = field.GetValue(null);
// Si c'est une variable d'instance, alors il faut passer en paramètre
// une instance du type myType
object val = field.GetValue(instanceOfMyType);
}
else
{
// champ non trouvé
}
<hr />Cela ne permet bien sûr de récupérer que les variables définies dans un type (un champ dans une classe ou une structure). Les variables locales (définies dans une méthode) ne peuvent pas être récupérées de cette manière. En fait, je ne pense pas qu'il soit possible de récupérer la valeur d'une variable locale à partir de son nom, dans la mesure où le nom des variables locales n'est pas stocké dans le code MSIL (elles sont référencées par leur index).