Переопределить CurrentCulture для элемента управления WinForms

StackOverflow https://stackoverflow.com/questions/925145

Вопрос

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

Это было полезно?

Решение

Вы можете достичь этого, создав экземпляр CultureInfo по вашему выбору и передав его в качестве параметра функциям форматирования (таким как toString).Только не назначайте его потоку.currentThread.CurrentCulture или поток.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, но я бы посоветовал вам дважды подумать, прежде чем делать это.Пользователи привыкли видеть даты и числа, отформатированные в соответствии с их языком;изменение этого может привести к путанице, особенно если это происходит только в одной части пользовательского интерфейса.

Другие советы

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

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top