Winform窗體如何改變語(yǔ)言類(lèi)型
Winform改變語(yǔ)言類(lèi)型比較復(fù)雜,需要根據(jù)不同語(yǔ)言應(yīng)用語(yǔ)言資源。而軟件在進(jìn)行語(yǔ)言切換時(shí),需要將當(dāng)前的UI文化線(xiàn)程引用對(duì)應(yīng)的語(yǔ)言類(lèi)型。常用的有三種方式,此處使用兩種,對(duì)比發(fā)現(xiàn)其中的優(yōu)缺點(diǎn):
/// <summary>
/// 獲取UI的文化信息
/// 創(chuàng)建者:楊釗
/// 創(chuàng)建時(shí)間:2019.05.20
/// </summary>
/// <param name="language">語(yǔ)言</param>
/// <returns>語(yǔ)言環(huán)境的縮寫(xiě)。如:英文的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è)置語(yǔ)言
/// </summary>
/// <param name="control">需要切換語(yǔ)言的對(duì)象</param>
/// <param name="language">語(yǔ)言</param>
/// <returns>語(yǔ)言環(huán)境的縮寫(xiě)。如:英文的en-US;中文的:zh-CN</returns>
public static string SetLanguage( this Control control, LanguageType language)
{
string lang = GetUICulture(language);
//采用這種方式,會(huì)出現(xiàn)如果通過(guò)自己寫(xiě)代碼添加的控件事件(即事件的添加不在InitializeComponent方法中),則需要重寫(xiě)添加一次。
//所有選中等設(shè)置需要重寫(xiě)設(shè)置一次。不適用于創(chuàng)建好、只等調(diào)用的窗體
//應(yīng)用語(yǔ)言資源
//Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
////清理控件已應(yīng)用的語(yǔ)言資源
//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);
//}
//以下方法會(huì)有問(wèn)題,在具有dataGridView控件的窗體中,如果先實(shí)例化后,再應(yīng)用它,不會(huì)被應(yīng)用新資源。而后發(fā)現(xiàn),DataGridView控件的表頭,并不是繼承自Control
// 并且,如果有同名控件,應(yīng)用會(huì)出錯(cuò)。比如:組合控件內(nèi)有一個(gè)子控件是lblTitle,但窗體也有一個(gè)控件是lblTitle,應(yīng)用資源就會(huì)出錯(cuò)
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>
/// 修改:張正選
/// 時(shí)間:2017.12.26
/// 原因:?jiǎn)挝伙@示偏小,英文下“Cancel”顯示會(huì)換行
/// </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窗體如何改變語(yǔ)言類(lèi)型的詳細(xì)內(nèi)容,更多關(guān)于Winform窗體改變語(yǔ)言類(lèi)型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 在WinForm應(yīng)用程序中快速實(shí)現(xiàn)多語(yǔ)言的處理的方法
- 分享兩種實(shí)現(xiàn)Winform程序的多語(yǔ)言支持的多種解決方案
- VisualStudio2019中為.NET Core WinForm App啟用窗體設(shè)計(jì)器
- visual studio 2019使用net core3.0創(chuàng)建winform無(wú)法使用窗體設(shè)計(jì)器
- WINFORM 窗體間的傳值實(shí)現(xiàn)解析
- c# WinForm 窗體之間傳值的幾種方式(小結(jié))
- C# Winform選項(xiàng)卡集成窗體詳解
- C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能示例
- C# WinForm制作異形窗體與控件的方法
- winform c#中子窗體關(guān)閉刷新父窗體的實(shí)例
相關(guān)文章
C#中DataGridView導(dǎo)出Excel的兩種方法
這篇文章主要介紹了C#中DataGridView導(dǎo)出Excel的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
C#編程實(shí)現(xiàn)對(duì)象與JSON串互相轉(zhuǎn)換實(shí)例分析
這篇文章主要介紹了C#編程實(shí)現(xiàn)對(duì)象與JSON串互相轉(zhuǎn)換的方法,結(jié)合實(shí)例分析了在DoNet2.0與Donet3.5環(huán)境下實(shí)現(xiàn)對(duì)象與JSON轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-11-11
Unity使用物理引擎實(shí)現(xiàn)多旋翼無(wú)人機(jī)的模擬飛行
這篇文章主要介紹了Unity使用物理引擎實(shí)現(xiàn)多旋翼無(wú)人機(jī)的模擬飛行,包括了詳細(xì)的原理介紹和代碼實(shí)現(xiàn),對(duì)物理引擎感興趣的同學(xué),可以參考下2021-04-04
基于A(yíng)forge攝像頭調(diào)用簡(jiǎn)單實(shí)例
這篇文章主要為大家詳細(xì)介紹了基于A(yíng)forge攝像頭調(diào)用的簡(jiǎn)單實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
C#使用Tesseract進(jìn)行Ocr識(shí)別的方法實(shí)現(xiàn)
本文主要介紹了C#使用Tesseract進(jìn)行Ocr識(shí)別的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
C#使用ToUpper()與ToLower()方法將字符串進(jìn)行大小寫(xiě)轉(zhuǎn)換的方法
這篇文章主要介紹了C#使用ToUpper()與ToLower()方法將字符串進(jìn)行大小寫(xiě)轉(zhuǎn)換的方法,實(shí)例分析了C#大小寫(xiě)轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-04-04

