0002 WinForms資源管理

資源是在生成的時候綁定到程序集上的命名的數據塊。架構

1、資源基礎

經過絕對路勁獲取資源會形成移植困難。這時須要將資源添加到程序集中。
對添加到項目中的資源,須要將其屬性中的」生成操做「改成」嵌入的資源「。
框架

要檢查文件是否已經被正確地嵌入項目的輸出程序集,能夠用.NET框架的SDK工具ILDasm.exe。經過命令行調用,選擇當前項目的編譯程序,打開」MANIFEST「清單,經過」查找「搜索是否存在添加的資源名。工具

訪問資源清單的列表,經過System.Reflection.Assembly類this

 
 
 
 
//得到這個類型的程序集Assembly asm = this.GetType().Assembly;//枚舉訪問程序集的清單資源foreach (string resourceName in asm.GetManifestResourceNames()){ MessageBox.Show(resourceName);}

知道清單資源的名稱後,就能夠經過`Assembly類的GetManifestResourcesStream'訪問資源。spa

2、強類型資源

無論文件的擴展名是什麼,嵌入的清單資源是沒有類型信息的。命令行

應用程序資源文件(.resx)

因爲資源自己沒有類型,因此選一個可以給資源打上合適的類型信息標籤的地方。這就是應用程序資源文件(.resx)的主要做用。遵循一種叫作Resx的.NET特定的XML架構,用來持久化保存資源類型信息。code

資源管理器

資源管理器:是在VS中打開.resx文件時顯示的界面。

刪除資源時須要從資源管理器中刪除,若是直接從項目中刪除仍會在元數據中保留引用,編譯時會報錯。orm

直接使用.resx文件

經過System.Resources.RexXResourceReader類blog

 
 
 
 
using (ResXResourceReader reader = new ResXResourceReader(絕對路徑)){ foreach (DictionaryEntry entry in reader) { string s = string.Format("{0} ({1})='{2}'", entry.Key, entry.Value.GetType(), entry.Value); MessageBox.Show(s); }}

使用編譯後的.resx資源

生成項目會致使.resx數據被嵌入爲嵌套資源,是被分組放在某個命名容器中的資源。資源

經過ILDasm.exe查看:

能夠經過resgen.exe.resx文件編譯進.resources文件

 
 
 
 
C:\> resgen.exe MyResources.resx

將.resx文件編譯進文件系統中.resources文件後,就能夠從清單資源流訪問.resources文件。

 
 
 
 
Assembly asm = Assembly.GetExecutingAssembly();//加載嵌入的.resources文件using (Stream stream = asm.GetManifestResourceStream(this.GetType(), "MyResource.resources")){ //在.resources數據流中查找資源 using (ResourceReader reader = new ResourceReader (stream)) { foreach (DictionaryEntry entry in reader) { if (entry.Key.ToString() == "MyString") { MessageBox.Show("MyString = " + (string)entry.Value); break; } } }}

3、資源管理器System.Resources.ResourceManager

ResourceManager類是由嵌入的.resources文件來初始化的

 
 
 
 
//獲取這個類型的程序集Assembly asm = this.GetType().Assembly;//將.resources文件加載到ResourceManger ResourceManager resman = new ResourceManager("WinFormsResource.MyResource", asm);

從資源管理器訪問資源

建立資源管理器後,就能夠用GetObject方法獲取嵌套的資源

 
 
 
 
//從ResourceManger訪問MyString字符串資源string s1 = (string)resman.GetObject("MyString");string s2 = resman.GetString("MyString");

強類型資源類

項目中的MyResources.Designer.cs文件暴露字符串、圖標、圖像、聲音和文本文件資源。

 
 
 
 
//訪問MyResources.resx中的強類型資源string s3 = MyResource.MyString;
相關文章
相關標籤/搜索