1

是否可以覆盖WinForms 中特定控件的CurrentCulture和?CurrentUICulture所以这个特定的控件使用不同的文化?

4

2 回答 2

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 的一部分中。

于 2009-05-29T09:26:07.353 回答
0

我认为您不能为单个控件执行此操作,但对于当前线程,您可以像这样切换:

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
于 2009-05-29T17:25:25.863 回答