2009-05-29 3 views
1

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

+0

Чтение свой вопрос еще раз, я понимаю, что я, возможно, не понял вас ... Я сначала прочитайте, как будто вы управляете тем, что хотите иметь другую культуру, но теперь я понимаю, что вы, возможно, хотите иметь действующий элемент управления (например, Button), используя другую культуру ... –

+0

последнее, что правильно. У меня есть существующий элемент управления (без доступа к источнику), и я бы хотел, чтобы этот элемент управления использовал другую культуру. –

ответ

2

Вы можете достичь этого, создав экземпляр 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"); 
+1

Привет, я знаю, как установить его для всего потока, но это не помогает мне, поскольку мне нужно измените его для специального элемента управления в моей форме. –

Смежные вопросы