




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C#使用Resources資源文件一、創建資源文件
可以將字符串、圖像或對象數據等資源包含在資源文件中,方便應用程序使用。
創建資源文件的方法:
1、手動或使用IDE工具自動生成XML資源(.resx)文件。(推薦)
創建一個包含字符串、圖像或對象數據的XML資源(.resx)文件。
使用VisualStudio創建一個資源文件并將其包含在項目中。
VisualStudio提供一個資源編輯器,借助該編輯器,可添加、刪除和修改資源。編譯時,資源文件會自動轉換成二進制.resources文件,并嵌入應用程序程序集或附屬程序集中。
注意:內部使用資源文件生成器(Resgen.exe)將文本文件轉換成二進制資源(.resources)文件。然后使用語言編譯器將這個二進制資源文件嵌入可執行應用程序或應用程序庫,或者使用程序集鏈接器(Al.exe)將這個二進制資源文件嵌入附屬程序集。
2、以編程方式創建一個XML資源(.resx)文件。使用ResXResourceWriter類
可以創建一個.resx文件、枚舉其資源并按名稱檢索特定資源。
ResXResourceWriterrw=newResXResourceWriter("Demo.rex");
rw.AddResource("Logo",Image.FromFile("logo.jpg");
rw.AddResource("Title","Procec#");
rw.Generate();
rw.Close();
二、使用ResourceManager讀取項目中資源文件
資源文件調用方法
(1).txt文件:不可以直接調用,得先將其轉換成.resources文件才能使用。
(2).resx文件:可以用ResXResourceReader來做讀取,但是這種方法不直觀,不推薦直接調用.resx文件。正確的方法是將其轉換成.resources文件,然后用ResourceManager作讀取工作。
注意如果是在VS.NET中添加的.resx文件,那么它們自動被設為EmbeddedResource,轉成.resources文件后被嵌入到Assembly中。
(3).resources文件分成兩種情況:
1、被嵌入或編譯成SatelliteAssembly:使用ResourceManager來獲得在Assembly中的資源。2、單獨文件,沒被編譯或嵌入到Assembly:使用ResourceManager.CreateFileBasedResourceManager來獲得資源集(ResourceSet)。
在新建的Windows項目中,一般自動生成兩個資源文件:Form1.resx和Resources.resx。其中,Form1.resx附屬Form1窗體,Resources.resx在項目Properties子文件夾下。
下面我們看看讀取項目中資源文件
1、強類型讀取項目中resx資源文件。
1、創建一個項目的默認資源文件。
2、在項目Properties目錄下,可以看到Resources.resx。
3、添加相關的資源。
4、可以看到系統自動生成的強類型類。
使用強類型可直接使用類
logo.Image=ZS.MouldManagement.Properties.Resources._0
不僅在Properties文件夾下可以建立資源文件,也可以在任何地方創建資源文件。在建立名稱為MyResource資源文件的同時,設計器會自動生成兩個文件:MyResource.resx和MyResource.Designer.cs。其中后一個文件就包裝了設計器自動生成的代碼,以方便對資源文件的強類型訪問。
強類型訪問代碼:
ZS.MouldManagement.Mould._333
2、使用代碼讀取項目中不同文化的resx資源文件
ResourceManager可以根據不同的UICulture設置返回不同的本地資源,我們只需知道調用資源用到它就可以了。
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**方法具有重載方法,第二個參數為CultureInfo對象
this.Title.Text=rm.GetString("Title");//資源文件名稱不帶擴展名
三、Windows項目中的窗體資源文件
因為對Form1.resx的訪問需要構造Syste.Resources.ResourceManager對象,而訪問Resources.resx里的資源可以直接使用Properties.Resources.resName(resName是你添加的資源的名稱)。
只有向窗體上添加圖標、圖像等資源后
會在窗體設計器Form1.Designer.cs自動生成下面的代碼
ComponentResourceManagerresources=newComponentResourceManager(typeof(Form1));//創建ResourceManager對象
this.Icon=((System.Drawing.Icon)(resources.GetObject("$this.Icon")));//根據資源的名稱獲取字符串資源
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
///遍歷窗體所有控件,針對其設置當前界面語言
////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中通過設置一文件的Build屬性為嵌入的資源實現。
在這種情況下ResourceManager就沒有用了,因為它只能獲取.resources資源文件。那么如何調用這類的資源呢?我們只要了解一些System.Reflection.Assembly這個類中的一些函數就可以了。
有三個相關函數,不過我們只需要Assembly.GetManifestResourceStream這個函數。這個函數將一嵌入到Assembly中的資源以stream的方式返回,而我們可以將這個stream轉成在.NET中可用的對象。
比如,如果嵌入資源是一圖片,那么我們可以利用newBitmap(Stream)這個構造方法獲得這個圖片資源的Bitmap對象。
1、將本地要加入的資源文本(視頻,圖片,文本或其它)加入項目。比如我們現在加入一個up.bmp的圖片到項目中,且放在文件夾Resources下面,
2、將up.bmp右鍵選擇屬性的生成操作設置為嵌入的資源。
注意:訪問資源的名稱規則為:項目命名空間.資源文件所在文件夾名.資源文件名
Assemblyassm=Assembly.getGetExecutingAssembly();
Streamstream=assm.GetManifestResourceStream("CreateDatabase.Resources.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中音樂與其他學科融合教學的有效策略和實踐路徑
- 拔尖創新人才培養新路徑與行動計劃
- 運營直播面試題及答案
- 三方分紅合同協議書
- 魚船出租合同協議書
- 區域合伙合同協議書
- 合同就業協議書怎么填
- 會議咨詢服務合同協議書
- 合同協議書為何最優先
- 餐飲協議書合同
- 老年人誤吸的預防團體標準試題
- 17小猴子下山 第一課時 公開課一等獎創新教學設計
- 廚房人員消防安全知識培訓
- 2024年廣東省中山市教學共進聯盟中考一模數學試題(含答案)
- 聚合工藝作業安全培訓課件
- 2024年山東省公共衛生臨床中心招聘筆試沖刺題含答案解析
- 電廠凝結水系統.課件
- 乳腺癌中醫護理查房
- 2024年司法考試真題及答案
- 天車檢驗報告
- 口腔護士進修總結匯報
評論
0/150
提交評論