c#如何改变多语言在所有窗口中的形式
本文关键字:窗口 语言 何改变 改变 | 更新日期: 2023-09-27 18:11:34
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));
}
}
首先,您应该使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>
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
- 将其添加到列表和
- 调用changellanguage (form7, language)
您应该考虑通过从列表中删除关闭的表单来保持表单列表的更新。如果你把它设置为一个公共属性,关闭表单可以从它自己移除,如果它引用了你的主表单。
如果可能,您应该在启动代码中设置应用程序的语言。
CultureInfo.CurrentUICulture = new CultureInfo("zh-cn");
在。net 4.5中,还有一个新的属性叫做DefaultThreadCurrentUICulture
。您可以使用它为所有新线程设置默认区域性。
如果两者都不适用于您的使用场景,则创建一个BaseLangForm
类,它派生自Form
,并从OnLoad
事件调用ChangeLanguage
方法。所有表单必须从BaseLangForm
开始派生。