C#使用Resources資源文件_第1頁(yè)
C#使用Resources資源文件_第2頁(yè)
C#使用Resources資源文件_第3頁(yè)
C#使用Resources資源文件_第4頁(yè)
C#使用Resources資源文件_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C#使用Resources資源文件一、創(chuàng)建資源文件

可以將字符串、圖像或?qū)ο髷?shù)據(jù)等資源包含在資源文件中,方便應(yīng)用程序使用。

創(chuàng)建資源文件的方法:

1、手動(dòng)或使用IDE工具自動(dòng)生成XML資源(.resx)文件。(推薦)

創(chuàng)建一個(gè)包含字符串、圖像或?qū)ο髷?shù)據(jù)的XML資源(.resx)文件。

使用VisualStudio創(chuàng)建一個(gè)資源文件并將其包含在項(xiàng)目中。

VisualStudio提供一個(gè)資源編輯器,借助該編輯器,可添加、刪除和修改資源。編譯時(shí),資源文件會(huì)自動(dòng)轉(zhuǎn)換成二進(jìn)制.resources文件,并嵌入應(yīng)用程序程序集或附屬程序集中。

注意:內(nèi)部使用資源文件生成器(Resgen.exe)將文本文件轉(zhuǎn)換成二進(jìn)制資源(.resources)文件。然后使用語(yǔ)言編譯器將這個(gè)二進(jìn)制資源文件嵌入可執(zhí)行應(yīng)用程序或應(yīng)用程序庫(kù),或者使用程序集鏈接器(Al.exe)將這個(gè)二進(jìn)制資源文件嵌入附屬程序集。

2、以編程方式創(chuàng)建一個(gè)XML資源(.resx)文件。使用ResXResourceWriter類

可以創(chuàng)建一個(gè).resx文件、枚舉其資源并按名稱檢索特定資源。

ResXResourceWriterrw=newResXResourceWriter("Demo.rex");

rw.AddResource("Logo",Image.FromFile("logo.jpg");

rw.AddResource("Title","Procec#");

rw.Generate();

rw.Close();

二、使用ResourceManager讀取項(xiàng)目中資源文件

資源文件調(diào)用方法

(1).txt文件:不可以直接調(diào)用,得先將其轉(zhuǎn)換成.resources文件才能使用。

(2).resx文件:可以用ResXResourceReader來(lái)做讀取,但是這種方法不直觀,不推薦直接調(diào)用.resx文件。正確的方法是將其轉(zhuǎn)換成.resources文件,然后用ResourceManager作讀取工作。

注意如果是在VS.NET中添加的.resx文件,那么它們自動(dòng)被設(shè)為EmbeddedResource,轉(zhuǎn)成.resources文件后被嵌入到Assembly中。

(3).resources文件分成兩種情況:

1、被嵌入或編譯成SatelliteAssembly:使用ResourceManager來(lái)獲得在Assembly中的資源。2、單獨(dú)文件,沒(méi)被編譯或嵌入到Assembly:使用ResourceManager.CreateFileBasedResourceManager來(lái)獲得資源集(ResourceSet)。

在新建的Windows項(xiàng)目中,一般自動(dòng)生成兩個(gè)資源文件:Form1.resx和Resources.resx。其中,F(xiàn)orm1.resx附屬Form1窗體,Resources.resx在項(xiàng)目Properties子文件夾下。

下面我們看看讀取項(xiàng)目中資源文件

1、強(qiáng)類型讀取項(xiàng)目中resx資源文件。

1、創(chuàng)建一個(gè)項(xiàng)目的默認(rèn)資源文件。

2、在項(xiàng)目Properties目錄下,可以看到Resources.resx。

3、添加相關(guān)的資源。

4、可以看到系統(tǒng)自動(dòng)生成的強(qiáng)類型類。

使用強(qiáng)類型可直接使用類

logo.Image=ZS.MouldManagement.Properties.Resources._0

不僅在Properties文件夾下可以建立資源文件,也可以在任何地方創(chuàng)建資源文件。在建立名稱為MyResource資源文件的同時(shí),設(shè)計(jì)器會(huì)自動(dòng)生成兩個(gè)文件:MyResource.resx和MyResource.Designer.cs。其中后一個(gè)文件就包裝了設(shè)計(jì)器自動(dòng)生成的代碼,以方便對(duì)資源文件的強(qiáng)類型訪問(wèn)。

強(qiáng)類型訪問(wèn)代碼:

ZS.MouldManagement.Mould._333

2、使用代碼讀取項(xiàng)目中不同文化的resx資源文件

ResourceManager可以根據(jù)不同的UICulture設(shè)置返回不同的本地資源,我們只需知道調(diào)用資源用到它就可以了。

Winform使用資源文件(ZS.MouldManagement.resx;ZS.MouldManagement.en-us.rex等等)

//多語(yǔ)言

Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture("en-us");

Thread.CurrentThread.CurrentUICulture=newCultureInfo("en-us");

Assemblyasm=Assembly.GetExecutingAssembly();

ResourceManagerrm=newResourceManager("ZS.MouldManagement.Properties.Resources",asm);

//ZS.MouldManagement是你程序的命名空間,ZS.MouldManagement.Properties是資源類Resources的命名空間,資源文件名稱不帶擴(kuò)展名

this.logo.Image=(Image)rm.GetObject("Logo");//Get**方法具有重載方法,第二個(gè)參數(shù)為CultureInfo對(duì)象

this.Title.Text=rm.GetString("Title");//資源文件名稱不帶擴(kuò)展名

三、Windows項(xiàng)目中的窗體資源文件

因?yàn)閷?duì)Form1.resx的訪問(wèn)需要構(gòu)造Syste.Resources.ResourceManager對(duì)象,而訪問(wèn)Resources.resx里的資源可以直接使用Properties.Resources.resName(resName是你添加的資源的名稱)。

只有向窗體上添加圖標(biāo)、圖像等資源后

會(huì)在窗體設(shè)計(jì)器Form1.Designer.cs自動(dòng)生成下面的代碼

ComponentResourceManagerresources=newComponentResourceManager(typeof(Form1));//創(chuàng)建ResourceManager對(duì)象

this.Icon=((System.Drawing.Icon)(resources.GetObject("$this.Icon")));//根據(jù)資源的名稱獲取字符串資源

this.Item1.Image=global::ZS.MouldManagement.Properties.Resources._0;//訪問(wèn)項(xiàng)目中的資源

從代碼可以看出,c#將窗體的圖標(biāo)文件作為資源進(jìn)行保存了起來(lái),然后利用ComponentResourceManager來(lái)獲取這些資源。

它和ResourceManager用法一樣,System.ComponentModel.ComponentResourceManager繼承自Syste.Resources.ResourceManager。

使用ComponentResourceManager類進(jìn)行界面多語(yǔ)言切換

Thread.CurrentThread.CurrentUICulture=newCultureInfo("zh-CN");

ComponentResourceManagerresources=newComponentResourceManager(typeof(Form1));

resources.ApplyResources(this,"$this");

AppLang(form,resources);

#regionAppLangforcontrol

///summary

///遍歷窗體所有控件,針對(duì)其設(shè)置當(dāng)前界面語(yǔ)言

////summary

///paramname="control"/param

///paramname="resources"/param

privatestaticvoidAppLang(Controlcontrol,System.ComponentModel.ComponentResourceManagerresources)

if(controlisMenuStrip)

resources.ApplyResources(control,control.Name);

MenuStripms=(MenuStrip)control;

if(ms.Items.Count0)

foreach(ToolStripMenuItemcinms.Items)

AppLang(c,resources);

foreach(Controlcincontrol.Controls)

resources.ApplyResources(c,c.Name);

AppLang(c,resources);

#endregion

#regionAppLangformenuitem

///summary

///遍歷菜單

////summary

///paramname="item"/param

///paramname="resources"/param

privatestaticvoidAppLang(ToolStripMenuItemitem,System.ComponentModel.ComponentResourceManagerresources)

if(itemisToolStripMenuItem)

resources.ApplyResources(item,item.Name);

ToolStripMenuItemtsmi=(ToolStripMenuItem)item;

if(tsmi.DropDownItems.Count0)

foreach(ToolStripMenuItemcintsmi.DropDownItems)

AppLang(c,resources);

#endregion

四、使用Assembly.GetManifestResourceStream()從此程序集加載指定的文件。

當(dāng)直接嵌入一資源時(shí),也就是說(shuō),不通過(guò)一個(gè)資源文件而直接將一資源(比如圖片)嵌入到Assembly中。這可以在VS.NET中通過(guò)設(shè)置一文件的Build屬性為嵌入的資源實(shí)現(xiàn)。

在這種情況下ResourceManager就沒(méi)有用了,因?yàn)樗荒塬@取.resources資源文件。那么如何調(diào)用這類的資源呢?我們只要了解一些System.Reflection.Assembly這個(gè)類中的一些函數(shù)就可以了。

有三個(gè)相關(guān)函數(shù),不過(guò)我們只需要Assembly.GetManifestResourceStream這個(gè)函數(shù)。這個(gè)函數(shù)將一嵌入到Assembly中的資源以stream的方式返回,而我們可以將這個(gè)stream轉(zhuǎn)成在.NET中可用的對(duì)象。

比如,如果嵌入資源是一圖片,那么我們可以利用newBitmap(Stream)這個(gè)構(gòu)造方法獲得這個(gè)圖片資源的Bitmap對(duì)象。

1、將本地要加入的資源文本(視頻,圖片,文本或其它)加入項(xiàng)目。比如我們現(xiàn)在加入一個(gè)up.bmp的圖片到項(xiàng)目中,且放在文件夾Resources下面,

2、將up.bmp右鍵選擇屬性的生成操作設(shè)置為嵌入的資源。

注意:訪問(wèn)資源的名稱規(guī)則為:項(xiàng)目命名空間.資源文件所在文件夾名.資源文件名

Assemblyassm=Assembly.getGetExecutingAssembly();

Streamstream=assm.GetManifestResourceStream("CreateDatabase.Resources.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論