C#開發的程序原生界面實在是太丑了,自己又沒有美化天賦,所以只能使用皮膚控件了,網上找到了IrisSkin2,包含一個.dll文件和若干ssk后綴的皮膚文件,代碼其實很簡單的。但是后來發現個問題,就是exe的運行必須有資源文件的支持,不然根本就打不開軟件,但我開發的100多K的小軟件實在沒必要這樣,是直接在桌面運行的那種,所以想到將全部的依賴文件整合到exe文件中,網上查找了很多資料,下面說下過程。
首先是IrisSkin2的使用方法:
初始化皮膚:
Sunisoft.IrisSkin.SkinEngine se = new Sunisoft.IrisSkin.SkinEngine(); se.SkinAllForm = true;
設置皮膚:
se.SkinFile="Skins/mdd_spring.ssk";
可以看到非常簡單,調換皮SkinFile的值就可以更換皮膚了,所有的皮膚名稱我放在一個Combox中。
下面是將文件整合:
將Properties\Resources.resx文件打開,在“添加資源”-“添加現有文件”,選擇皮膚文件就行了,Resources.resx這個文件本身是包括在exe中的
其后是調用的問題:
有兩種調用方式:Properties.Resources.名稱 Properties.Resources.ResourceManager.GetObject("名稱"),由於現在只知道名稱,所以使用第二種方式,返回式是Object類型,se.SkinFile是string類型,不兼容,SkinEngine還有一種設置皮膚的方法se.SkinStream,是Stream類型,所以要將Object轉化為Stream
先強制轉化為byte[],然后轉化為Stream
byte[] obj=(byte[])Properties.Resources.ResourceManager.GetObject(selectedValue); se.SkinStream = new MemoryStream(obj);
至於整個dll文件,網上的方法是:找到你引用的程序集的屬性,把 “嵌入互操作類型” 改成 true,我用的VS2008貌似沒有這個選項,VS2010的可以試下
另外一種方式:同樣把dll文件添加到Properties\Resources.resx文件中,然后再使用
byte[] obj = (byte[])Properties.Resources.ResourceManager.GetObject(Properties.Resources.IrisSkin2); System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(buffer); //Load assembly using byte array
Assembly.Load具體用法可參考:Assembly.Load 詳解
整合exe增加的大小基本就是添加東西的大小,如果誰有更簡便的方法請留下言
出處:http://blog.csdn.net/yz1311/article/details/17009151