【发布时间】:2023-03-22 08:54:01
【问题描述】:
在运行时更改表单语言的正确方法是什么?
- 使用递归手动设置所有控件,例如this
- 将语言选择保存到文件 > 重新启动应用程序 > 加载语言
InitializeComponent();之前的选择 - 使用 Form 构造函数替换 active from 的实例(如果可能的话)
- 别的东西
关于这个有很多半写的线程,但没有一个提供真正的答案来说明什么是正确的方法?
更新:
澄清我的问题:
做这样的事情:
public Form1()
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");
this.InitializeComponent();
}
工作正常,我的所有控件和资源中的所有其他内容都得到正确翻译。 并做类似的事情:
private void button1_Click(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
}
什么都不做,表单保持我在InitializeComponent();之前设置的语言
【问题讨论】:
-
@Hans 这不是重复的,我的问题是:正确的方法是什么,您链接到的问题只是提供快速修复而不是真正的答案。
-
“快速修复”到底有什么问题?大多数程序员更喜欢它们,而不是对框架进行彻底的重新设计。我猜你认为这应该是 Winforms 的内置功能。它不是。只有应用“快速修复”的能力才是设计功能。
-
@Hans 好吧,这是我的工作申请,所以我想知道“正确”的方式。答案中的代码是半功能性的,因为它没有覆盖 ListView 的 ColumnHeader.Text 属性,因为框架中的错误返回 ColumnHeader.Name 为空,所以它有点是框架的重新设计。它并没有回答我关于什么是正确方法的问题。
-
再次,没有适当的方法,它不是内置功能。如果您确实对列标题有疑问,那么您在问题中描述该问题的工作做得很差。如果这是一份工作申请,那么您当然应该说“这不可能,它需要一个丑陋的快速解决方案”。
标签: c# winforms localization globalization