我如何将Winform更改为另一种语言

时间:2019-03-26 18:08:38

标签: c# winforms radio-button

我有一个winform,我将表单的语言更改为荷兰语。之后,我编辑了分组框标签的名称,等等。当我更改单选按钮时,它只会更改分组框的名称,而不会更改文本框的标签。

我将表格的语言更改为荷兰语。然后我做了2个Radiobuttons荷兰语和德语。当我按下荷兰语单选按钮时,它只会更改组框的名称,其他标签和内容保持不变。

这是我使用的方法和代码。

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

 private void DutchRadiobutton_CheckedChanged(object sender, EventArgs e)
        {
            ChangeLanguage("nl-NL");

        }

当我单击单选按钮荷兰语语言时,我希望更改整个表单以及其中的每个控件。目前,只有组框名称发生变化,但其中的标签和文本框保持不变。

1 个答案:

答案 0 :(得分:0)

递归示例

此方法的输入可以是“ this”,例如您的控件或GroupBox的引用。

private void ApplyChanges(Control ctrl)
{
    foreach (Control c in ctrl.Controls)
    {
        // Do something

        Debug.WriteLine($"ctrl name: {c.Name}"); // Test code, just to print the control name(s).
        if (c.Controls != null && c.Controls.Count > 0)
        {
            ApplyChanges(ctrl);
        }
    }
}

语言更改方法

private void ApplyResources(Control parent, CultureInfo culture)
{
    _componentResourceManager.ApplyResources(parent, parent.Name, culture);

    foreach (Control ctl in parent.Controls)
    {
        ApplyResources(ctl, culture);
    }
}

或者看看现有的问题/答案:'Proper way to change language at runtime'