Rechargement du Programme
Soir All,
Je cherche un moyen de recharger, à partir du code, le meme programme.
Cad, le programme se charge, l'utilisateur ayant fait x modifications, le programme s'arrete pour prendre en compte les modifications et le programme se relance automatiquement.
J'ai beau chercher, rien trouver ou de bien vraiment correct.
Des infos, des idées ?
Thx pour votre aide.
Danyel.
ComponentResourceManager.ApplyResources
Salut,
Si tu regardes le code généré par le designer, tu verras un peu partout des lignes comme celle-là :
resources.ApplyResources(this.textBox1, "textBox1");
Ca récupère dans les resources du programme les propriétés de l'objet textBox1 et les applique à l'objet. Ce code est exécuté lors de la création de la Form, mais rien n'empêche d'appeler ApplyResources à un autre moment...
Donc, si tu as généré les fichiers de resources avec Visual Studio, pour changer la langue sans redémarrer, il suffit de :
1. Changer la culture en cours :
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(culture_name);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture_name);
2. de créer un objet ComponentResourceManager :
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
3. et d'appeler la méthode ApplyResources pour chaque objet à traduire :
resources.ApplyResources(this.object1, "object1");
En plus cela changera non seulement la langue du texte mais aussi toutes les autres propriétés associées à une culture (images par exemple).
Evidemment c'est un peu laborieux d'écrire ça pour tous les objets d'une Form... donc j'ai créé une macro VS qui automatise ça :). Par exemple pour une forme nommée Form1, la macro extrait tous les appels à ApplyResources dans Form1.Designer.cs, et génère un fichier Form1.Language.cs qui ajoute à Form1 une méthode ApplyLanguage(string culture_name). Le code peut ensuite appeler cette méthode pour changer la langue dynamiquement.
Et pour ne pas oublier de regénérer les fichiers .Language.cs, il suffit de créer une étape de post-compilation qui appelle la macro...
Bon, je suis pas sûr que mes explications soient limpides... si tu veux je t'enverrai un programme dans lequel j'ai utilisé ça, et les macros qui vont avec.