您好,登錄后才能下訂單哦!
這篇文章主要講解了“C#如何使用Resources資源文件”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“C#如何使用Resources資源文件”吧!
可以將字符串、圖像或?qū)ο髷?shù)據(jù)等資源包含在資源文件中,方便應(yīng)用程序使用。
創(chuàng)建資源文件的方法:
創(chuàng)建一個(gè)包含字符串、圖像或?qū)ο髷?shù)據(jù)的 XML 資源 (.resx) 文件。
使用 Visual Studio 創(chuàng)建一個(gè)資源文件并將其包含在項(xiàng)目中。
Visual Studio 提供一個(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)制資源文件嵌入附屬程序集。
可以創(chuàng)建一個(gè) .resx 文件、枚舉其資源并按名稱(chēng)檢索特定資源。
ResXResourceWriter rw = new ResXResourceWriter("Demo.rex"); rw.AddResource("Logo", Image.FromFile("logo.jpg"); rw.AddResource("Title", "Proce c#"); rw.Generate(); rw.Close();
資源文件調(diào)用方法
(1).txt 文件:不可以直接調(diào)用,得先將其轉(zhuǎn)換成 .resources 文件才能使用。
(2).resx 文件:可以用 ResXResourceReader 來(lái)做讀取,但是這種方法不直觀(guān),不推薦直接調(diào)用 .resx 文件。正確的方法是將其轉(zhuǎn)換成 .resources 文件,然后用 ResourceManager 作讀取工作。
注意如果是在 VS.NET 中添加的 .resx 文件,那么它們自動(dòng)被設(shè)為 Embedded Resource,轉(zhuǎn)成 .resources 文件后被嵌入到 Assembly 中。
(3).resources 文件分成兩種情況:
1、被嵌入或編譯成 Satellite Assembly:使用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、創(chuàng)建一個(gè)項(xiàng)目的默認(rèn)資源文件。
2、在項(xiàng)目“Properties”目錄下,可以看到Resources.resx。
3、添加相關(guān)的資源。
4、可以看到系統(tǒng)自動(dòng)生成的強(qiáng)類(lèi)型類(lèi)。
使用強(qiáng)類(lèi)型可直接使用類(lèi)
logo.Image = ZS.MouldManagement.Properties.Resources._0
不僅在Properties文件夾下可以建立資源文件,也可以在任何地方創(chuàng)建資源文件。在建立名稱(chēng)為MyResource資源文件的同時(shí),設(shè)計(jì)器會(huì)自動(dòng)生成兩個(gè)文件:MyResource.resx和MyResource.Designer.cs。其中后一個(gè)文件就包裝了設(shè)計(jì)器自動(dòng)生成的代碼,以方便對(duì)資源文件的強(qiáng)類(lèi)型訪(fǎng)問(wèn)。
強(qiáng)類(lèi)型訪(fǎng)問(wèn)代碼:
ZS.MouldManagement.Mould._333
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 = new CultureInfo("en-us"); Assembly asm = Assembly.GetExecutingAssembly(); ResourceManager rm = new ResourceManager("ZS.MouldManagement.Properties.Resources", asm); //ZS.MouldManagement是你程序的命名空間,ZS.MouldManagement.Properties 是資源類(lèi)Resources的命名空間, 資源文件名稱(chēng)不帶擴(kuò)展名 this.logo.Image = (Image)rm.GetObject("Logo");//Get**方法具有重載方法,第二個(gè)參數(shù)為CultureInfo對(duì)象 this.Title.Text = rm.GetString("Title"); //資源文件名稱(chēng)不帶擴(kuò)展名
因?yàn)閷?duì)Form1.resx的訪(fǎng)問(wèn)需要構(gòu)造Syste.Resources.ResourceManager對(duì)象,而訪(fǎng)問(wèn)Resources.resx里的資源可以直接使用Properties.Resources.resName(resName是你添加的資源的名稱(chēng))。
只有向窗體上添加圖標(biāo)、圖像等資源后
會(huì)在窗體設(shè)計(jì)器Form1.Designer.cs自動(dòng)生成下面的代碼
ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));//創(chuàng)建ResourceManager對(duì)象 this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));//根據(jù)資源的名稱(chēng)獲取字符串資源 this.Item1.Image = global::ZS.MouldManagement.Properties.Resources._0; //訪(fǎng)問(wèn)項(xiàng)目中的資源
從代碼可以看出,c#將窗體的圖標(biāo)文件作為資源進(jìn)行保存了起來(lái),然后利用ComponentResourceManager來(lái)獲取這些資源。
它和ResourceManager用法一樣,System.ComponentModel.ComponentResourceManager繼承自Syste.Resources.ResourceManager。
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN"); ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1)); resources.ApplyResources(this, "$this"); AppLang(form, resources); #region AppLang for control /// <summary> /// 遍歷窗體所有控件,針對(duì)其設(shè)置當(dāng)前界面語(yǔ)言 /// </summary> /// <param name="control"></param> /// <param name="resources"></param> private static void AppLang(Control control, System.ComponentModel.ComponentResourceManager resources) { if (control is MenuStrip) { resources.ApplyResources(control, control.Name); MenuStrip ms = (MenuStrip)control; if (ms.Items.Count > 0) { foreach (ToolStripMenuItem c in ms.Items) { AppLang(c, resources); } } } foreach (Control c in control.Controls) { resources.ApplyResources(c, c.Name); AppLang(c, resources); } } #endregion #region AppLang for menuitem /// <summary> /// 遍歷菜單 /// </summary> /// <param name="item"></param> /// <param name="resources"></param> private static void AppLang(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources) { if (item is ToolStripMenuItem) { resources.ApplyResources(item, item.Name); ToolStripMenuItem tsmi = (ToolStripMenuItem)item; if (tsmi.DropDownItems.Count > 0) { foreach (ToolStripMenuItem c in tsmi.DropDownItems) { AppLang(c, resources); } } } } #endregion
當(dāng)直接嵌入一資源時(shí),也就是說(shuō),不通過(guò)一個(gè)資源文件而直接將一資源(比如圖片)嵌入到 Assembly 中。這可以在 VS.NET 中通過(guò)設(shè)置一文件的 Build 屬性為“嵌入的資源” 實(shí)現(xiàn)。
在這種情況下 ResourceManager 就沒(méi)有用了,因?yàn)樗荒塬@取 .resources 資源文件。那么如何調(diào)用這類(lèi)的資源呢?我們只要了解一些 System.Reflection.Assembly 這個(gè)類(lèi)中的一些函數(shù)就可以了。
有三個(gè)相關(guān)函數(shù),不過(guò)我們只需要 Assembly.GetManifestResourceStream 這個(gè)函數(shù)。這個(gè)函數(shù)將一嵌入到 Assembly 中的資源以 stream 的方式返回,而我們可以將這個(gè) stream 轉(zhuǎn)成在 .NET 中可用的對(duì)象。
比如,如果嵌入資源是一圖片,那么我們可以利用 new Bitmap(Stream) 這個(gè)構(gòu)造方法獲得這個(gè)圖片資源的 Bitmap 對(duì)象。
1、將本地要加入的資源文本(視頻,圖片,文本或其它)加入項(xiàng)目。比如我們現(xiàn)在加入一個(gè)up.bmp的圖片到項(xiàng)目中,且放在文件夾Resources下面,
2、將up.bmp右鍵選擇“屬性”的“生成操作”設(shè)置為"嵌入的資源"。
注意:訪(fǎng)問(wèn)資源的名稱(chēng)規(guī)則為:項(xiàng)目命名空間.資源文件所在文件夾名.資源文件名
Assembly assm = Assembly.getGetExecutingAssembly(); Stream stream = assm.GetManifestResourceStream("CreateDatabase.Resources.aa.txt"); //讀取流 //文本 System.IO.StreamReader sr = new System.IO.StreamReader(stream); string str = sr.ReadToEnd(); //XML文件 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(stream); //圖片 Image img = Image.FromStream(stream);
感謝各位的閱讀,以上就是“C#如何使用Resources資源文件”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)C#如何使用Resources資源文件這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。