是否可以覆盖WinForms中特定控件的CurrentCulture和CurrentUICulture?所以这个特定的控件使用了不同的区域性?
发布于 2009-05-29 09:26:07
可以通过实例化所选的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-29 17:25:26
我不认为你可以对单个控件这样做,但是对于当前线程,你可以像这样切换:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");https://stackoverflow.com/questions/925145
复制相似问题