Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何在所有windows窗体中更改多语言?_C#_Windows_Multilingual - Fatal编程技术网

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

C#如何在所有windows窗体中更改多语言?,c#,windows,multilingual,C#,Windows,Multilingual,C#如何在所有windows窗体中更改多语言 我使用此方法更改其他语言,但它仅更改当前windows窗体 我想为所有windows窗体选择一种语言。谢谢你的回答 这是我的密码: private void ChineseTToolStripMenuItem_Click(object sender, EventArgs e) { ChangeLanguage("zh-tw"); ; } private void englishToolStri

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

我使用此方法更改其他语言,但它仅更改当前windows窗体

我想为所有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));
        }
    }

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

CultureInfo.CurrentUICulture = new CultureInfo("zh-cn");
在.NET4.5中,还有一个名为
DefaultThreadCurrentUICulture
的新属性。您可以使用它为所有新线程设置默认区域性


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

首先,您应该使
ChangeLanguage
方法允许在任何控件或窗体上调用它。 这是一个递归版本,它将
控件
作为参数

注意:
表单
也是
控件

因此,您可以调用此方法来更改具有句柄的所有窗体

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);
}
接下来,您需要以某种方式保留一个打开表单的列表。
列表是一个好方法

只在当前窗口上调用
ChangeLanguage
函数,而不是调用
changeLanguageOnalForms
函数。因此,如果您有一个名为
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

  • 将其添加到列表中,然后
  • 调用ChangeLanguage(表格7,语言)
您应该考虑通过从表单列表中删除已关闭的表单来保持表单列表的最新状态。
如果您将其设置为公共属性,关闭表单可以从中删除自身,如果它引用了您的主表单。

迭代Application.OpenForms以查找所有打开的表单。我不明白。它应该是ChangeLanguage(这个“en”);?和ChangeLanguage方法更改为您的代码?是的,这是当前窗口的“this”,如果您要更改其他窗口,则需要对它们的引用。(您询问了许多表单!)语言字符串当然应该取决于菜单选项。