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