巧妙揭秘VB.NET資源使用
我們要透過現(xiàn)象看到事物的本質(zhì),這句話也適合我們編程人,只要你看清了開發(fā)語言的本質(zhì)你才能走入它的世界,我雖說對哲學(xué)不感興趣,但對net在后臺到底瞞著我干了些什么見不得光的勾當(dāng)還是非常好奇的。點(diǎn)擊解決方案資源管理器,點(diǎn)擊"顯示所有文件"的按紐,很驚奇地發(fā)現(xiàn)在form1.vb下出現(xiàn)了幾個后綴名為resx的文件,這些家伙就是本文要說明的資源文件了(留意一下資源文件的文件名包含的en和zh-CHS的字符,這就代表該資源文件儲存的語言內(nèi)容,en為英文,zh-CHS為簡體中文)下面我們用突破和代碼詳細(xì)的為你講解VB.NET資源使用。
雙擊form1.en.resx,看一下VB.NET資源使用儲存界面的語言信息的:
左邊的數(shù)據(jù)源顯示資源文件的實(shí)際數(shù)據(jù)(data)以及資源文件的文件版本信息(resheader),我只關(guān)心資源文件的實(shí)際數(shù)據(jù)儲存,右邊的表列出了儲存的數(shù)據(jù):很顯然name代表控件的屬性(其實(shí)是引用資源數(shù)據(jù)的鍵),后面的value代表對應(yīng)鍵的實(shí)際數(shù)據(jù)(在程序中界面顯示的值就靠這里了,你可以試著把Let's apeak English改一下,然后運(yùn)行一下程序看看);comment代表注釋,type代表數(shù)據(jù)的類型,mimetype就是資源數(shù)據(jù)的MIME 類型(當(dāng)你窗體或picturebox存有圖片時你會看到這里有一個很長的值,由于這個對編程作用不大,不作解釋)。我們還可以在這個界面中插入新的資源數(shù)據(jù),只要填寫好name和value就可以了。
明白了資源文件后,我們再看一下代碼中是怎樣引用這引些值的,打開窗體的代碼編輯器,展開"Windows 窗體設(shè)計器生成的代碼"這一代碼段,找到窗體的Private Sub InitializeComponent()過程,
第一句為:
- Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
這句代碼的含義就是產(chǎn)生一個resourcemanager對象來對form1的資源文件進(jìn)行控制,由于net 會根據(jù)線程的區(qū)域?qū)傩哉{(diào)用窗體的不同語言的資源文件,所以我們前面示例中將改變線程區(qū)域信息的代碼放在InitializeComponent()過程之前,以便net在創(chuàng)建resources對象時調(diào)用正確的語言資源文件。
接下來就是一大堆對控件屬性進(jìn)行賦值的語句了,看一下label的text 屬性是如何賦值的就會明白資源數(shù)據(jù)的使用方法了。
- Me.Label1.Text = resources.GetString("Label1.Text")
很簡單,使用ResourceManager的方法就可以獲得實(shí)際需要的資源數(shù)據(jù)了必要時可以可以使用getobjcet方法取得數(shù)據(jù),然后再用Ctype將其轉(zhuǎn)為指定的類型。
寫到這兒,本來按原計劃我是想收筆的,但是天氣依然陰沉沉,很悶,干脆就將資VB.NET資源使用的終極殺招也介紹一下好了。資源發(fā)展到現(xiàn)在已不權(quán)是簡單地解決程序國際化的界面方面了,在net中可以使用資源將任意文件嵌入到你的可執(zhí)行文件中,在需要時再用流的方式讀出使用(是任意文件哦,而且方法非常簡單),好象很酷的樣子吧。
【編輯推薦】