如何在设置CurrentUICulture后更新Window窗体UI?
我试图在运行时设置应用程序的CurrentUICulture。 但是,我表单中的菜单项保持不变。 我是否还需要做一些改变CurrentUICulture的事情?
从谷歌搜索结果中删除: http : //bytes.com/topic/net/answers/468556-change-currentuiculture-controls-doesnt-refresh
更改“CurrentUICulture”不会自动在所有UI控件中生效。
更改“CurrentUICulture”只会影响一些与本地化相关的API。 例如,“System.Resources.ResourceManager.GetString(..)”,然后它将使用当前“CurrentUICulture”来加载合适的字符串资源。
对于Windows.Form UI控件,您需要在更改“CurrentUICulture”后重新加载所有资源字符串。
假设您的资源实际上是本地化的(请注意,您必须手动执行此操作 – 没有任何内容可以自动执行此操作),您可以在显示第一个窗口之前设置UI文化。 例如在Main
。
编辑:
另外,请确保在UI线程上设置CurrentUICulture
。
以下是一些如何刷新UI的示例代码(再次,从此答案顶部的链接中窃取):
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang); //my selected lang from menu ReloadControlString(); //... private void ReloadControlString() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FormMain)); this.menuApp.Text = resources.GetString("menuApp.Text"); }
你可以从InitializeComponent()
获取一些。
迟到了派对。 但这是我提出的解决方案:
public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void mnuCultureEnglish_Click( object sender, EventArgs e ) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo( "en-US" ); Controls.Clear(); InitializeComponent(); } private void mnuCultureGerman_Click( object sender, EventArgs e ) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo( "de-DE" ); Controls.Clear(); InitializeComponent(); } }
假设您已使用VS或兼容的实用程序来创建.resx文件:
var crm = new ComponentResourceManager(typeof(My_Form)); crm.ApplyResources(this.my_button, "my_button"); // etc ...
这可能会节省您手动设置所有可本地化属性的一些手工劳动,并且还必须使用GetXXX(字符串)重载。
在更改CurrentUICulture之后,至少可以尝试此循环:
foreach (Control ctl in this.Controls) { resources.ApplyResources(ctl, ctl.Name); }
你可以试试下面提到的代码,我想这会帮助你摆脱它。
上述就是C#学习教程:如何在设置CurrentUICulture后更新Window窗体UI?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
CultureInfo _cinfo = new CultureInfo("fr-FR"); Thread.CurrentThread.CurrentCulture = _cinfo; Thread.CurrentThread.CurrentUICulture = _cinfo; //After changing the Culture just access the value of relevant culture through resource file label1.text = CommonResource.Ready;
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/998290.html