Winform窗体如何改变语言类型
更新时间:2020年12月8日 11:34 点击:1469
Winform改变语言类型比较复杂,需要根据不同语言应用语言资源。而软件在进行语言切换时,需要将当前的UI文化线程引用对应的语言类型。常用的有三种方式,此处使用两种,对比发现其中的优缺点:
/// <summary> /// 获取UI的文化信息 /// 创建者:杨钊 /// 创建时间:2019.05.20 /// </summary> /// <param name="language">语言</param> /// <returns>语言环境的缩写。如:英文的en-US;中文的:zh-CN</returns> public static string GetUICulture(LanguageType language) { string lang = "en-US"; if (language == LanguageType.Chinese) { lang = "zh-CN"; } else if (language == LanguageType.English) { lang = "en-US"; } return lang; } /// <summary> /// 设置语言 /// </summary> /// <param name="control">需要切换语言的对象</param> /// <param name="language">语言</param> /// <returns>语言环境的缩写。如:英文的en-US;中文的:zh-CN</returns> public static string SetLanguage( this Control control, LanguageType language) { string lang = GetUICulture(language); //采用这种方式,会出现如果通过自己写代码添加的控件事件(即事件的添加不在InitializeComponent方法中),则需要重写添加一次。 //所有选中等设置需要重写设置一次。不适用于创建好、只等调用的窗体 //应用语言资源 //Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang); ////清理控件已应用的语言资源 //form.Controls.Clear(); ////重新初始化界面 //Type type = form.GetType(); ////MethodInfo[] methodInfos = type.GetMethods( BindingFlags.NonPublic); //MethodInfo method = 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 = new System.Globalization.CultureInfo(lang); FormManager.language = language; } if (control != null) { var frmtype = control.GetType(); ComponentResourceManager resources = new ComponentResourceManager(frmtype); resources.ApplyResources(control, "$this"); AppLang(control, resources); } return lang; } /// <summary> /// 修改:张正选 /// 时间:2017.12.26 /// 原因:单位显示偏小,英文下“Cancel”显示会换行 /// </summary> /// <param name="control"></param> /// <param name="resources"></param> private static void AppLang(Control control, ComponentResourceManager resources) { if (control is Control) { foreach (Control c in control.Controls) { resources.ApplyResources(c, c.Name); AppLang(c, resources); //DataGridView控件的表头,并不是继承自Control if (c is DataGridView) { DataGridView dgv = c as DataGridView; foreach(var item in dgv.Columns) { resources.ApplyResources(item, (item as DataGridViewColumn).Name); } } } } }
以上就是Winform窗体如何改变语言类型的详细内容,更多关于Winform窗体改变语言类型的资料请关注猪先飞其它相关文章!
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了R语言作图:坐标轴的设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- 这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
- 这篇文章主要介绍了R语言基本画图函数与多图多线的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- 本篇文章是对C#中WinForm控件之Dock顺序调整进行了详细的分析介绍,需要的朋友参考下...2020-06-25
- 这篇文章主要介绍了C#窗体布局方式详解的相关资料,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了C#创建一个简单windows窗体应用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C# Winform中实现主窗口打开登录窗口关闭的方法,这在需要用户名密码的软件项目中是必用的一个技巧,要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇C# winform打开Excel文档的方法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 这篇文章主要给大家介绍C# winform快捷键设置技巧,涉及到C winform快捷键相关知识,对C winform知识感兴趣的朋友可以参考下本篇文章...2020-06-25
- 这篇文章主要介绍了简单实现C#窗体程序判断是否闰年的相关代码,禁止窗体调整大小,关闭窗体前的判断,感兴趣的小伙伴们可以参考一下...2020-06-25
c#中Winform实现多线程异步更新UI(进度及状态信息)
本篇文章主要介绍了c#中Winform实现多线程异步更新UI(进度及状态信息) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25