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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

ResXResourceWriterrw=newResXResourceWriter("Demo.rex");

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

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

rw.Generate();

rw.Close();

二、使用ResourceManager讀取項目中資源文件

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

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

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

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

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

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

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

下面我們看看讀取項目中資源文件

1、強類型讀取項目中resx資源文件。

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

2、在項目Properties目錄下,可以看到Resources.resx。

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

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

使用強類型可直接使用類

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

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

強類型訪問代碼:

ZS.MouldManagement.Mould._333

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

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

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

//多語言

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的命名空間,資源文件名稱不帶擴展名

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

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

三、Windows項目中的窗體資源文件

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

只有向窗體上添加圖標、圖像等資源后

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

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

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

this.Item1.Image=global::ZS.MouldManagement.Properties.Resources._0;//訪問項目中的資源

從代碼可以看出,c#將窗體的圖標文件作為資源進行保存了起來,然后利用ComponentResourceManager來獲取這些資源。

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

使用ComponentResourceManager類進行界面多語言切換

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

ComponentResourceManagerresources=newComponentResourceManager(typeof(Form1));

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

AppLang(form,resources);

#regionAppLangforcontrol

///summary

///遍歷窗體所有控件,針對其設(shè)置當前界面語言

////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()從此程序集加載指定的文件。

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

在這種情況下ResourceManager就沒有用了,因為它只能獲取.resources資源文件。那么如何調(diào)用這類的資源呢?我們只要了解一些System.Reflection.Assembly這個類中的一些函數(shù)就可以了。

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

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

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

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

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

Assemblyassm=Assembly.getGetExecutingAssembly();

Streamstream=assm.GetManifestResourceStream("CreateDatabase.Resources.

溫馨提示

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

評論

0/150

提交評論