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));
}
}
答案 0 :(得分:1)
首先,您应该使用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>
的{{1}},您可以这样做:
myFormsList
您还应该保留一个公共变量来保存当前语言!
void ChangeLanguageOnAllforms( string lang )
{
foreach (Form f in myFormsList)
{
if (f != null)
{
resources = new ComponentResourceManager(typeof(f));
ChangeLanguage(f, languageString);
}
}
}
你还应该在打开任何新表格时说出form7
您应该考虑通过从中删除封闭表单来保持表单列表的最新状态。 如果你把它作为一个公共财产,那么关闭表格可以从中删除它,如果它有你的主表格的引用..
答案 1 :(得分:0)
如果可能,您应该在启动代码中设置应用程序的语言。
CultureInfo.CurrentUICulture = new CultureInfo("zh-cn");
在.Net 4.5中,还有一个名为DefaultThreadCurrentUICulture
的新属性。您可以使用它为所有新线程设置默认文化。
如果两者都不适用于您的使用方案,请创建一个BaseLangForm
类,该类派生自Form
,并从ChangeLanguage
事件中调用OnLoad
方法。您的所有表单必须从BaseLangForm
开始。