用资源更改WinForm的语言

时间:2012-01-17 14:54:14

标签: c# c#-4.0

我有以下方法更改winform的语言。

    private void LoadLanguage(string lang)
    {
        foreach (Control c in this.Controls)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm));
            resources.ApplyResources(c, c.Name, new CultureInfo(lang));
        }
    }

我在Form_Load方法上调用此方法。在窗体内部我有一个选项卡控件但tabPage文本属性不会更改。另一方面,Label被正确更改为适当的语言。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

删除您的方法并尝试在Program.cs文件中执行此操作:

//Add this line
Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageString);
Application.Run(new Form());

编辑:

您的代码无效的主要原因是您为表单控件应用语言。这意味着您应用于TabControl控件,但TabControl也有“内部”控件(标签页)。因此,您需要通过控件递归迭代,以便为所有控件和子控件应用语言。试试这段代码:

private void LoadLanguage(string lang)
{
    ComponentResourceManager resources = new ComponentResourceManager(typeof(main));
    CultureInfo cultureInfo = new CultureInfo(lang);

    doRecursiveLoading(this, cultureInfo, resources);
}

private void doRecursiveLoading(Control parent, CultureInfo cultureInfo,  ComponentResourceManager resources)
{
    foreach (Control c in parent.Controls)
    {
        resources.ApplyResources(c, c.Name, cultureInfo);
        if (c.Controls.Count > 0)
            doRecursiveLoading(c, cultureInfo, resources);
     }
 }