c#如何改变多语言在所有窗口中的形式

本文关键字:窗口 语言 何改变 改变 | 更新日期: 2023-09-27 18:11:34

c#如何在所有windows窗体中更改多语言?

我用这个方法来改变其他语言,但它只改变当前的窗口形式。

我想选择一种语言为所有的窗口形式。谢谢你的回答。

下面是我的代码:
        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));
        }
    }

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函数。所以如果你有一个List<Form> myFormsList你可以输入:

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

  • 将其添加到列表和
  • 调用changellanguage (form7, language)

您应该考虑通过从列表中删除关闭的表单来保持表单列表的更新。如果你把它设置为一个公共属性,关闭表单可以从它自己移除,如果它引用了你的主表单。

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

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

在。net 4.5中,还有一个新的属性叫做DefaultThreadCurrentUICulture。您可以使用它为所有新线程设置默认区域性。

如果两者都不适用于您的使用场景,则创建一个BaseLangForm类,它派生自Form,并从OnLoad事件调用ChangeLanguage方法。所有表单必须从BaseLangForm开始派生。