Переопределить CurrentCulture для элемента управления WinForms
-
06-09-2019 - |
Вопрос
Возможно ли переопределить 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");