Winform窗體如何改變語言類型
Winform改變語言類型比較復(fù)雜,需要根據(jù)不同語言應(yīng)用語言資源。而軟件在進行語言切換時,需要將當(dāng)前的UI文化線程引用對應(yīng)的語言類型。常用的有三種方式,此處使用兩種,對比發(fā)現(xiàn)其中的優(yōu)缺點:
/// <summary> /// 獲取UI的文化信息 /// 創(chuàng)建者:楊釗 /// 創(chuàng)建時間:2019.05.20 /// </summary> /// <param name="language">語言</param> /// <returns>語言環(huán)境的縮寫。如:英文的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> /// 設(shè)置語言 /// </summary> /// <param name="control">需要切換語言的對象</param> /// <param name="language">語言</param> /// <returns>語言環(huán)境的縮寫。如:英文的en-US;中文的:zh-CN</returns> public static string SetLanguage( this Control control, LanguageType language) { string lang = GetUICulture(language); //采用這種方式,會出現(xiàn)如果通過自己寫代碼添加的控件事件(即事件的添加不在InitializeComponent方法中),則需要重寫添加一次。 //所有選中等設(shè)置需要重寫設(shè)置一次。不適用于創(chuàng)建好、只等調(diào)用的窗體 //應(yīng)用語言資源 //Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang); ////清理控件已應(yīng)用的語言資源 //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控件的窗體中,如果先實例化后,再應(yīng)用它,不會被應(yīng)用新資源。而后發(fā)現(xiàn),DataGridView控件的表頭,并不是繼承自Control // 并且,如果有同名控件,應(yīng)用會出錯。比如:組合控件內(nèi)有一個子控件是lblTitle,但窗體也有一個控件是lblTitle,應(yīng)用資源就會出錯 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窗體如何改變語言類型的詳細內(nèi)容,更多關(guān)于Winform窗體改變語言類型的資料請關(guān)注腳本之家其它相關(guān)文章!
- 在WinForm應(yīng)用程序中快速實現(xiàn)多語言的處理的方法
- 分享兩種實現(xiàn)Winform程序的多語言支持的多種解決方案
- VisualStudio2019中為.NET Core WinForm App啟用窗體設(shè)計器
- visual studio 2019使用net core3.0創(chuàng)建winform無法使用窗體設(shè)計器
- WINFORM 窗體間的傳值實現(xiàn)解析
- c# WinForm 窗體之間傳值的幾種方式(小結(jié))
- C# Winform選項卡集成窗體詳解
- C# WinForm實現(xiàn)窗體上控件自由拖動功能示例
- C# WinForm制作異形窗體與控件的方法
- winform c#中子窗體關(guān)閉刷新父窗體的實例
相關(guān)文章
基于WebRequest.RegisterPrefix的使用詳解
本篇文章對WebRequest.RegisterPrefix的使用進行了詳細的分析介紹,需要的朋友參考下2013-05-05C#數(shù)值轉(zhuǎn)換-隱式數(shù)值轉(zhuǎn)換表參考
隱式轉(zhuǎn)換就是直接使用,比如可以把一個 byte 類型直接用在 int 上2013-04-04C#中派生類調(diào)用基類構(gòu)造函數(shù)用法分析
這篇文章主要介紹了C#中派生類調(diào)用基類構(gòu)造函數(shù)用法,實例分析了派生類調(diào)用基類構(gòu)造函數(shù)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04c#使用htmlagilitypack解析html格式字符串
這篇文章主要介紹了c#使用htmlagilitypack解析html格式字符串的示例,需要的朋友可以參考下2014-03-03