首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改UICulture后重新加载表单

更改UICulture后重新加载表单
EN

Stack Overflow用户
提问于 2013-07-25 03:17:34
回答 3查看 1.5K关注 0票数 0

我正在开发一个windows窗体应用程序。

在我的主窗体中,我有一个菜单项,单击该菜单项时,我需要更改整个窗体的语言。

我正在将UICulture设置为新的区域性,但新语言仍未显示。

作为一种变通方法,我需要迭代该窗体中的所有控件并应用新资源。我一点也不喜欢这样。

对于其他问题,我不能做Application.Restart();而且我的表单非常重,所以我不想隐藏表单并创建一个新的表单。

那么有没有其他方法可以重新加载我的表单呢?

EN

回答 3

Stack Overflow用户

发布于 2013-07-25 05:53:59

因此,根据您想要做的事情,我认为您可以避免迭代整个表单组件集合的唯一方法是迭代特定于区域性的资源,并将它们应用于控件。这应该是一个较小的集合,因为只有窗体上的控件子集才具有需要更改的值。它看起来像这样:

代码语言:javascript
复制
var enumerator = mgr.GetResourceSet(Thread.CurrentThread.CurrentUICulture, true, true).GetEnumerator();

while (enumerator.MoveNext())
{
  var current = enumerator.Entry;
  var objName = current.Key.ToString().Split('.')[0];
  var item = this.GetType().GetField( objName, BindingFlags.NonPublic | BindingFlags.Instance );

  if (item != null)
  {
      mgr.ApplyResources(item.GetValue(this), objName);
  }
}

请注意,这不是迭代forms控件集合,而是迭代资源文件中的键,使用反射查找窗体上的组件,并仅将资源应用于文件中具有设置的那些组件。

这只是一个示例,我认为它相当脆弱(即在表单上没有对应字段的嵌套网格视图组件。有多个“”的名称。资源文件中的级别等)但我希望这足以让你入门!

票数 1
EN

Stack Overflow用户

发布于 2017-03-24 03:43:19

也许它会为你工作。

添加到clicking事件或任何

代码语言:javascript
复制
this.Controls.Clear();
  InitializeComponent();
票数 1
EN

Stack Overflow用户

发布于 2013-07-26 03:43:33

我找到了另一种选择。

我正在将所有的控件添加到一个userControl中。所以我的主窗体只包含一个Usercontrol。

现在,当更改语言时,我只需删除用户控件,处理它,创建一个新的用户控件并将其添加到窗体中。

你们对这种方法有什么看法?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17842941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档