Winform窗体如何改变语言类型
Winform改变语言类型比较复杂,需要根据不同语言应用语言资源。而软件在进行语言切换时,需要将当前的UI文化线程引用对应的语言类型。常用的有三种方式,此处使用两种,对比发现其中的优缺点:
//////获取UI的文化信息 ///创建者:杨钊 ///创建时间:2019.05.20 /// ///语言 /// 语言环境的缩写。如:英文的en-US;中文的:zh-CN publicstaticstringGetUICulture(LanguageTypelanguage) { stringlang="en-US"; if(language==LanguageType.Chinese) { lang="zh-CN"; } elseif(language==LanguageType.English) { lang="en-US"; } returnlang; } //////设置语言 /// ///需要切换语言的对象 /// 语言 /// 语言环境的缩写。如:英文的en-US;中文的:zh-CN publicstaticstringSetLanguage(thisControlcontrol,LanguageTypelanguage) { stringlang=GetUICulture(language); //采用这种方式,会出现如果通过自己写代码添加的控件事件(即事件的添加不在InitializeComponent方法中),则需要重写添加一次。 //所有选中等设置需要重写设置一次。不适用于创建好、只等调用的窗体 //应用语言资源 //Thread.CurrentThread.CurrentUICulture=newSystem.Globalization.CultureInfo(lang); ////清理控件已应用的语言资源 //form.Controls.Clear(); ////重新初始化界面 //Typetype=form.GetType(); ////MethodInfo[]methodInfos=type.GetMethods(BindingFlags.NonPublic); //MethodInfomethod=type.GetMethod("InitializeComponent",BindingFlags.NonPublic|BindingFlags.Instance); //if(method!=null) //{ //method.Invoke(form,null); //} //以下方法会有问题,在具有dataGridView控件的窗体中,如果先实例化后,再应用它,不会被应用新资源。而后发现,DataGridView控件的表头,并不是继承自Control //并且,如果有同名控件,应用会出错。比如:组合控件内有一个子控件是lblTitle,但窗体也有一个控件是lblTitle,应用资源就会出错 if(FormManager.language!=language) { Thread.CurrentThread.CurrentUICulture=newSystem.Globalization.CultureInfo(lang); FormManager.language=language; } if(control!=null) { varfrmtype=control.GetType(); ComponentResourceManagerresources=newComponentResourceManager(frmtype); resources.ApplyResources(control,"$this"); AppLang(control,resources); } returnlang; } //////修改:张正选 ///时间:2017.12.26 ///原因:单位显示偏小,英文下“Cancel”显示会换行 /// ////// privatestaticvoidAppLang(Controlcontrol,ComponentResourceManagerresources) { if(controlisControl) { foreach(Controlcincontrol.Controls) { resources.ApplyResources(c,c.Name); AppLang(c,resources); //DataGridView控件的表头,并不是继承自Control if(cisDataGridView) { DataGridViewdgv=casDataGridView; foreach(varitemindgv.Columns) { resources.ApplyResources(item,(itemasDataGridViewColumn).Name); } } } } }
以上就是Winform窗体如何改变语言类型的详细内容,更多关于Winform窗体改变语言类型的资料请关注毛票票其它相关文章!