2009-05-29 7 views
1

Est-il possible de remplacer le CurrentCulture et le CurrentUICulture pour un contrôle spécifique dans WinForms? Alors que ce contrôle spécifique utilise une culture différente?Remplacer le contrôle CurrentCulture pour WinForms

+0

lecture votre question je me rends compte que je vous ai mal compris ... Je d'abord lu comme si vous faites un contrôle que vous voulez avoir une autre culture, mais maintenant je me rends compte que vous voulez peut-être avoir un contrôle existant (comme Button) agir en utilisant une culture différente ... –

+0

dernière chose est correcte. J'ai un contrôle existant (sans accès à la source) et je voudrais que ce contrôle utilise une culture différente –

Répondre

2

Vous pouvez obtenir cela en instanciant le CultureInfo de votre choix et le transmettre en tant que paramètre aux fonctions de formatage (telles que ToString). Ne l'affectez pas à Thread.CurrentThread.CurrentCulture ou Thread.CurrentThread.CurrentUICulture, car cela changera la culture de l'application en tant que telle.

Dans votre code:

CultureInfo myCulture = CultureInfo.GetCultureInfo("en-US"); 
Console.WriteLine(DateTime.Now.ToString(myCulture)); 

Si votre code exécute le code externe, et que vous voulez forcer ce code à utiliser votre culture choisie en interne, vous pouvez le faire en créant un nouveau thread, affecter la culture ce thread, puis avoir ce thread exécuter le code. Assurez-vous simplement de prêter attention aux problèmes de threading qui vient avec cette approche.

échantillon du fil:

string formattedDate = string.Empty; 
Thread t = new Thread(delegate() 
{ 
    // call external code without specifying culture 
    formattedDate = DateTime.Now.ToString(); 
    waitHandle.Set(); 
}); 
t.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 
t.Start(); 
waitHandle.WaitOne(); // wait for the thread to finish 
Console.WriteLine(formattedDate); 

En tant que dernier point; Je ne sais pas pourquoi vous voulez remplacer la CurrentCulture, mais je vous suggère de réfléchir à deux fois avant de le faire. Les utilisateurs sont habitués à voir des dates et des nombres mis en forme en fonction de leurs paramètres régionaux; changer ce qui pourrait être déroutant, surtout si cela se produit dans une partie de l'interface utilisateur.

0

Je ne pense pas que vous pouvez le faire pour le contrôle unique, mais pour le thread courant, vous pouvez passer comme ceci:

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE"); 
+1

Salut, je sais comment le régler pour l'ensemble du fil, mais cela ne m'aide pas, comme je dois changez-le pour un contrôle spécial sur mon formulaire. –

Questions connexes