我有一个 winforms 应用程序,用户必须能够在运行时更改语言。
为了概括该开关并避免必须对控件名称进行硬编码,我尝试了以下扩展:
internal static void SetLanguage(this Form form, CultureInfo lang)
{
ComponentResourceManager resources = new ComponentResourceManager(form.GetType());
ApplyResourceToControl(resources, form, lang);
resources.ApplyResources(form, "$this", lang);
}
private static void ApplyResourceToControl(ComponentResourceManager resources, Control control, CultureInfo lang)
{
foreach (Control c in control.Controls)
{
ApplyResourceToControl(resources, c, lang);
resources.ApplyResources(c, c.Name, lang);
}
}
这确实改变了所有字符串。
然而,这样做的副作用是,无论当前大小是多少,窗口的整个内容都会调整为窗口原始启动大小。
如何防止布局更改或启动新的布局计算?
查看 .resx 文件以了解所有内容都被重新分配。 Size 和 Form.AutoScaleDimensions 等属性是可本地化的属性。重新分配它们会产生您所看到的效果。尤其是取消自动缩放会非常令人不快。
没有具体建议来解决此问题,这只是不能在表单构造函数之外的任何其他地方运行。重建表格。指出表单的实际用户从不觉得需要即时更改其母语似乎永远不会给人留下深刻的印象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)