Winform窗体如何改变语言类型
#代码知识 发布时间: 2026-01-12
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窗体改变语言类型的资料请关注其它相关文章!
代码知识SEO上一篇 : Python eval函数介绍及用法
下一篇 : 基于python爬取梨视频实现过程解析
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!