覆盖CurrentCulture for WinForms控件

时间:2009-05-29 09:21:55

标签: winforms controls currentculture currentuiculture

是否可以覆盖WinForms中特定控件的CurrentCultureCurrentUICulture?这个特定的控件使用不同的文化吗?

2 个答案:

答案 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,但我建议你在这之前再三考虑。用户习惯于查看根据其区域设置格式化的日期;改变这可能会让人感到困惑,特别是如果它只发生在UI的一部分中。

答案 1 :(得分:0)

我认为你不能为单一控制做到这一点,但对于当前的线程你可以这样切换:

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