首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写WinForms控件的CurrentCulture

重写WinForms控件的CurrentCulture
EN

Stack Overflow用户
提问于 2009-05-29 09:21:55
回答 2查看 1.8K关注 0票数 1

是否可以覆盖WinForms中特定控件的CurrentCultureCurrentUICulture?所以这个特定的控件使用了不同的区域性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-29 09:26:07

可以通过实例化所选的CultureInfo并将其作为参数传递给格式化函数(如ToString)来实现这一点。只是不要将它赋值给Thread.CurrentThread.CurrentCulture或Thread.CurrentThread.CurrentUICulture,因为这会改变应用程序的区域性。

在你的代码中:

代码语言:javascript
复制
CultureInfo myCulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(DateTime.Now.ToString(myCulture));

如果您的代码执行外部代码,并且您希望强制此代码使用内部选择的区域性,则可以通过创建一个新线程,将区域性分配给该线程,然后让该线程执行该代码来实现此目的。只需确保注意该方法带来的线程问题。

线程示例:

代码语言:javascript
复制
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的一个部分。

票数 2
EN

Stack Overflow用户

发布于 2009-05-29 17:25:26

我不认为你可以对单个控件这样做,但是对于当前线程,你可以像这样切换:

代码语言:javascript
复制
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("DE");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/925145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档