欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Winform窗體如何改變語言類型

 更新時間:2020年11月09日 08:42:59   作者:一只獨行的猿  
這篇文章主要介紹了Winform窗體如何改變語言類型,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

  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)文章!

相關(guān)文章

最新評論