cs_dowi
Messages postés9Date d'inscriptionvendredi 20 février 2009StatutMembreDernière intervention 2 juillet 2009
-
23 févr. 2009 à 09:19
cs_dowi
Messages postés9Date d'inscriptionvendredi 20 février 2009StatutMembreDernière intervention 2 juillet 2009
-
23 févr. 2009 à 12:22
Bonjour a tous,
Premierement, desole si cette question a deja ete posee, mais je n'ai pas trouve de reponse qui me convienne ou que je comprenne.
Dans le but de traduire des applications existantes, et afin de gagner le maximum de temps possible: je rajoute une classe traduction, ainsi qu'une legere modification du main.
En gros, selon les variables d'entrees, le programme rempli un XML de toutes les champs a traduire. Ou utilise un fichier XML pour changer les valeurs de ces champs.
voici donc la fonction chargee de changer la valeur des controls de la classe traduction:
public void LoadLabel(string path)
{
List<TextToChange> ListToLoad = new List<TextToChange>();
XmlManager load = new XmlManager(); //classe traitant avec le fichier XML
load.FileName = path;
load.loadfromXML(ListToLoad);//recuperer des donnees
ArrayList formlist = FormsLister();//tableau de tous les forms de l'application
foreach (Form f in formlist)
{
foreach (Control ctrl in f.Controls)
{
foreach (TextToChange txt in ListToLoad)
{ if (ctrl.Name txt.Tname && txt.Nform f.Name)
{
ctrl.Text = txt.Tvalue;
}
}
}
}
}
Au deboggeur, je vois qu'il recupere bien tout ce que je veux, qu'il fait meme le changement sur ctrl.text, mais pas de resultat a l'ecran.
Je sais plus trop quoi faire, sachant que je ne connais ni les formulaires presents, ni les controls( la methode doit etre generique).
Evidemment, toutes critiques sont bonnes a prendre.
merci d'avance, en esperant ne pas trop m'faire engueuler.
titeoe
Messages postés433Date d'inscriptionsamedi 26 avril 2003StatutMembreDernière intervention 4 décembre 20091 23 févr. 2009 à 11:23
Juste comme ca :
Quand tu affiches un de tes formulaire, tu fais un truc du genre :
Form1 f = new Form1();
f.Show();
Or, la première ligne instancie un nouveau formulaire et donc ne réutilise pas le formulaire que tu as trafiqué au start de ton application.
2 solutions :
Soit tu gardes en mémoire une instance traduite de tout tes formulaires et tu les réutilise (pénible)
Soit tu traduit tes formulaires à la volée entre l'instanciation et l'affichage :
Form1 f = new Form1();
// Ton code foreach de traduction des libéllés
f.Show();
Bon courage.
---------------------------------------
R. Seb MCP C# 2.0 - MCTS ASP.Net 2.0
cs_dowi
Messages postés9Date d'inscriptionvendredi 20 février 2009StatutMembreDernière intervention 2 juillet 2009 23 févr. 2009 à 12:22
Actuellement, je me sers d'un clic boutton pour faire le changement (la flemme de taper les arguments), donc la Form est deja instanciee (du moins la form mere).
Mais c'est une tres bonne remarque, j'ai completement occulte que mon code ne modifiera que ce qui est deja instancie.
Je vais voir s'il m'est toujours impossible de modifier les sources.