C#如何在所有窗体中更改多种语言?

C#如何在所有窗体中更改多种语言?

我使用这种方法来改变其他语言,但它只改变当前窗体的forms。

我想为所有窗体select一种语言。 谢谢回答。

这是我的代码:

private void ChineseTToolStripMenuItem_Click(object sender, EventArgs e) { ChangeLanguage("zh-tw"); ; } private void englishToolStripMenuItem_Click(object sender, EventArgs e) { ChangeLanguage("en"); } private void ChineseSToolStripMenuItem_Click(object sender, EventArgs e) { ChangeLanguage("zh-cn"); } private void ChangeLanguage(string lang) { foreach (Control c in this.Controls) { ComponentResourceManager resources = new ComponentResourceManager(typeof(FormMain)); resources.ApplyResources(c, c.Name, new CultureInfo(lang)); } } 

Solutions Collecting From Web of "C#如何在所有窗体中更改多种语言?"

首先你应该让ChangeLanguage方法在任何控件或表单上调用它。 这里是一个递归的版本,它将Control作为参数。

注意: Forms也是Controls

所以你可以调用这个方法来改变你所有的窗体

 public ComponentResourceManager resources; private void ChangeLanguage(Control ctl, string lang) { resources.ApplyResources(ctl, ctl.Name, new CultureInfo(lang)); foreach (Control c in ctl.Controls) ChangeLanguage(c, lang); } 

接下来,你需要以某种方式保留你的开放表单。 List<Form>是一个好方法。

您只需调用ChangeLanguage函数,而不是仅在当前窗口调用ChangeLanguageOnAllforms函数。 所以如果你有一个名为myFormsListList<Form>你可以这样做:

 void ChangeLanguageOnAllforms( string lang ) { foreach (Form f in myFormsList) { if (f != null) { resources = new ComponentResourceManager(typeof(f)); ChangeLanguage(f, languageString); } } } 

你还应该保持一个公共变量来保存当前的语言!

 public string language = "en"; 

你也应该打开任何新的表单说form7

  • 将它添加到列表中
  • 调用ChangeLanguage(form7,language)

你应该考虑通过从其中删除封闭的表单来保持表单的最新列表。 如果你把它作为一个公共财产,闭幕表格可以从它自己删除,如果它有一个对你的主表单的引用。

如果可能的话,你应该在你的启动代码中设置你的应用程序的语言。

 CultureInfo.CurrentUICulture = new CultureInfo("zh-cn"); 

在.Net 4.5中,还有一个名为DefaultThreadCurrentUICulture的新属性。 您可以使用它来设置所有新线程的默认文化。

如果两者都不适用于您的使用场景,请创建一个BaseLangForm类,该类派生自Form ,然后从OnLoad事件调用ChangeLanguage方法。 所有你的表格都必须从BaseLangForm派生出来。