我有一个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");
}
当我单击单选按钮荷兰语语言时,我希望更改整个表单以及其中的每个控件。目前,只有组框名称发生变化,但其中的标签和文本框保持不变。
答案 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'