




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年入團(tuán)考試解讀試題及答案
- 中級(jí)審計(jì)師考試高級(jí)技巧試題及答案
- 2025年護(hù)師考試常見(jiàn)癥狀試題及答案
- 中級(jí)審計(jì)師備考小技巧試題及答案
- 2025年入團(tuán)考試的關(guān)鍵點(diǎn)及試題及答案
- 2024年無(wú)人機(jī)考試的建議與反饋試題及答案
- 無(wú)人機(jī)常識(shí)和技能試題及答案
- 搶先獲取2025年一級(jí)建造師考試試題及答案
- 一級(jí)建造師復(fù)習(xí)心得試題及答案
- 審計(jì)師巔峰對(duì)決試題及答案剖析
- 廚房人員消防安全知識(shí)培訓(xùn)
- 2024年廣東省中山市教學(xué)共進(jìn)聯(lián)盟中考一模數(shù)學(xué)試題(含答案)
- 聚合工藝作業(yè)安全培訓(xùn)課件
- 2024年山東省公共衛(wèi)生臨床中心招聘筆試沖刺題含答案解析
- 電廠凝結(jié)水系統(tǒng).課件
- 乳腺癌中醫(yī)護(hù)理查房
- 2024年司法考試真題及答案
- 天車檢驗(yàn)報(bào)告
- 口腔護(hù)士進(jìn)修總結(jié)匯報(bào)
- 土豆從種植后到收獲應(yīng)如何澆水
- QCC品管圈之降低鼻腸管堵管率護(hù)理課件
評(píng)論
0/150
提交評(píng)論