實現WinForm全球化的簡單方法

來源:互聯網
上載者:User
看了蟈蟈今天發的文章後,研究了一下WinForm的多語言解決方案,參考網上的一些資料後,發現一個簡單的方法,完全可以通過VS.NET的強大功能實現。

具體方法如下:

1. 選中一個Form表單,在屬性編輯器中設定Localizable屬性為true(預設為false)

2. 設定Language屬性為default,這樣就可以編輯預設情況下的文化設定

3. 然後在Form中添加你需要的基本控制項,如按鈕、菜單、標籤等

    注意,一旦Form發生變化,VS.net就會自動產生<Form名稱>.resx檔案

    技巧:如果要看resx檔案,可以點擊右側"方案總管"頂部的“顯示所有檔案“表徵圖,這樣就可以看到Form表單的cs檔案下多了一個<Form名稱>.resx檔案

4. 菜單布局完成後,重新設定Language屬性為另一種語言,如中文(簡體)

5. Form中修改剛才添加的按鈕、菜單和標籤的屬性,比如修改Text屬性為中文文字,當然,文化設定並不局限於Text,還可以設定對齊、布局等,儲存後,你會發現在Form表單的cs檔案下又多了一個<Form名稱>.zh-CN.resx檔案。

這時,其實我們已經實現了全球化,讓我們來看看VS.Net都為我們添加了些什麼。首先開啟<Form名稱>.resx檔案,看到大量如下資料:

menuItem4.Text           SaveAs

menuItem2.Enabled      true

menuItem7.Visible        true

...

從這些資料可以發現,VS.net會自動遍曆所有顯示控制項的可修改屬性,根據當前Form表單的Language設定,會把屬性更改儲存在特定語言的.resx檔案中,例如中文(簡體)則儲存到xxx.zh-cn.resx中。

再讓我們看看Form的初始化中的代碼:
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));


this.mainMenu1.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("mainMenu1.RightToLeft")));

// 

// menuItem1

// 

this.menuItem1.Enabled = ((bool)(resources.GetObject("menuItem1.Enabled")));


this.menuItem1.Shortcut = ((System.Windows.Forms.Shortcut)(resources.GetObject("menuItem1.Shortcut")));

this.menuItem1.ShowShortcut = ((bool)(resources.GetObject("menuItem1.ShowShortcut")));

this.menuItem1.Text = resources.GetString("menuItem1.Text");

this.menuItem1.Visible = ((bool)(resources.GetObject("menuItem1.Visible")));


從代碼看,其實使用的方法與 蟈蟈 所用的完全相同,都是用了ResourceManager(System.Type)方法來實現ResourceManager的初始化。另外,其中通過大量 顯示類型轉換 完成控制項屬性設定。大家也可以用這些初始化代碼來做運行時多語言介面切換。

 

這種方法的確簡單易用,但對於有很多視窗的應用程式來說,並不是很方便,因為對於每個視窗,你需要多少種語言就必須配置多少個資源檔,這些設定檔由於是按每個視窗儲存的,統一管理不是很方便,目前還在繼續研究中。

參考資料:

1. 蟈蟈 的  .NET 多語言解決方案(demo篇)

2. NoteXPad 的 .NET Framework 中多語言支援的實現

3. ceocio(MS MVP) 的 在C#案頭應用使用多語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.