五分鐘教你編寫一個(gè)關(guān)于VB.NET資源文件
在我的印象中,資源是一種很寶貴的東西,不知道大家的觀點(diǎn)是不是,資源在作為國際化出現(xiàn)的時(shí)候,執(zhí)行文件已不再是單調(diào)的英文面孔,漢語、西班牙語等國際語言的支持強(qiáng)烈要求同樣的程序,可以使用不同的語言界面。在當(dāng)時(shí),將程序邏輯代碼和提示信息分離是一個(gè)不錯(cuò)的主意,堤示信息分離出來成為一個(gè)資源文件而獨(dú)立存在,在程序進(jìn)行編譯時(shí)再由編譯器鏈接到可執(zhí)行文件中。
直到現(xiàn)在,資源在這個(gè)方面依然扮演著重要的角色。以下以VB.net的一個(gè)小例子說明資源的存在:
例一:時(shí)下許多網(wǎng)上的軟件都有什么多國語言版之類的說法,實(shí)在點(diǎn)就是同一程序在安裝或使用過程中有個(gè)國家區(qū)域選項(xiàng),當(dāng)你選擇了對應(yīng)的國家時(shí),程序就會顯示使用相應(yīng)國家語言的界面。其實(shí)在編程實(shí)現(xiàn)這種功能非常簡單,只不過是使程序同時(shí)嵌入幾個(gè)不同語言VB.NET資源文件而已,以下示例就是一個(gè)同時(shí)支持英文和中文界面的示例程序。程序創(chuàng)建完整步驟如下:
1、在VB.net中新建一個(gè)項(xiàng)目,類型選擇windows應(yīng)用程序,項(xiàng)目名稱改為resourcesample1。
2、在form1上放一個(gè)Lable控件.
3、選擇窗體form1,按以下指示設(shè)置屬性:
(1)Locallizable 屬性設(shè)為True,這一步是關(guān)鍵,這個(gè)屬性告訴net環(huán)境,要使用資源文件來保存窗體及窗體內(nèi)的各種控件的屬性值.
(2)選擇窗體的language屬性,將其設(shè)為英語。然后按下表設(shè)置窗體及l(fā)able控件的其它屬性:
控件名稱 屬性 屬性值
- Form1 text Form
- Label Text Let's speak English!
窗體外觀如下:
圖1
(3)重新選擇窗體的language屬性,將其設(shè)為中文(簡體)。然后按下表設(shè)置窗體及l(fā)able控件的其它屬性:
控件名稱 屬性 屬性值
- Form1 text 窗體
- Label Text
讓我們說中文!
窗體外觀如下:
圖2
大家也許很奇怪,為什么要對窗體及l(fā)abel的text屬性進(jìn)行兩次不同的賦值呢?其實(shí)答案很簡單,vs.net太聰明了,由于我們使用Locallizable 屬性告訴net環(huán)境,要使用VB.NET資源文件來保存窗體及窗體內(nèi)的各種控件的屬性值,當(dāng)使用不同的language屬性,它會將窗體及其上控件的屬性按語言分別記錄在不同的資源文件內(nèi)。不信你將language屬性重新設(shè)為英語看看,第一個(gè)英文界面的窗體又跳出來了吧8-D
4、如果說可視化編程是光明之途的話,那么我們的快樂時(shí)光到此結(jié)束,由于net還沒有智能化到會判斷什么時(shí)候使用什么國家的語言界面的程度(如果net 太智能了,程序員就不幸了,下崗啊,誰受得了?!),所以以下必須由我們自己編寫代碼確定程序的實(shí)際界面顯示。
打開 form1的New過程,在InitializeComponent()前加入如下代碼(這段代碼作用是在窗體初始化組件之前,按指定的語言區(qū)域信息載入相應(yīng)的界面VB.NET資源文件):
- Dim tenmDialogResult As DialogResult
- tenmDialogResult = MessageBox.Show("請問是使用中文還是英語,中文選擇OK,英文選擇CANCEL。", _
- "語言選擇", _
- MessageBoxButtons.OKCancel, _
- MessageBoxIcon.Question, _
- MessageBoxDefaultButton.Button1, _
- MessageBoxOptions.DefaultDesktopOnly)
REM 一般情況下程序都是使用讀取初始化文件的方法來取得語言設(shè)置信息,
- '但本例程為了簡便起見,僅使用一個(gè)對話框提示用戶選擇適合自己的語言.
- If tenmDialogResult = DialogResult.OK Then '使用中文界面
- gstrAppCulture = "zh-CHS"
- Else '使用英文界面
- gstrAppCulture = "en"
- End If
- '將需要使用的區(qū)域信息放到當(dāng)前線程的區(qū)域信息中,
- '程序窗體會根據(jù)設(shè)定的信息裝載相應(yīng)的資源文件以顯示信息
- System.Threading.Thread.CurrentThread.CurrentUICulture = _
- New System.Globalization.CultureInfo(gstrAppCulture)
剩下的事這沒什么好說的了,按運(yùn)行吧,在出現(xiàn)對話框時(shí)試著點(diǎn)OK或Cancel看看你的杰作吧,很酷的同時(shí)支持中英文界面的示例程序哦。
【編輯推薦】