我有以下方法更改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
被正确更改为适当的语言。有什么建议吗?
答案 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);
}
}