Переопределить элемент управления CurrentCulture для WinForms - PullRequest
1 голос
/ 29 мая 2009

Можно ли переопределить CurrentCulture и CurrentUICulture для определенного элемента управления в WinForms? Так что этот конкретный элемент управления использует другую культуру?

Ответы [ 2 ]

2 голосов
/ 29 мая 2009

Этого можно добиться, создав экземпляр CultureInfo по вашему выбору и передав его в качестве параметра в функции форматирования (например, ToString). Только не назначайте его Thread.CurrentThread.CurrentCulture или Thread.CurrentThread.CurrentUICulture, так как это изменит культуру приложения как таковую.

В вашем коде:

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

Если ваш код выполняет внешний код, и вы хотите заставить этот код использовать вашу внутренне выбранную культуру, вы можете сделать это, создав новый поток, назначив культуру этому потоку, а затем заставив этот поток выполнить код. Обязательно обратите внимание на проблемы с многопоточностью, связанные с этим подходом.

Образец резьбы:

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);

В качестве последней точки; Я не знаю , почему вы хотите переопределить CurrentCulture, но я бы посоветовал вам дважды подумать, прежде чем делать это. Пользователи привыкли видеть даты, отформатированные в соответствии с их языком; изменение, которое может сбить с толку, особенно если это происходит только в одной части пользовательского интерфейса.

0 голосов

Я не думаю, что вы можете сделать это для одного элемента управления, но для текущего потока вы можете переключиться так:

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