C#開發的程序原生界面實在是太醜了,本身又沒有美化天賦,因此只能使用皮膚控件了,網上找到了IrisSkin2,包含一個.dll文件和若干ssk後綴的皮膚文件,代碼其實很簡單的。可是後來發現個問題,就是exe的運行必須有資源文件的支持,否則根本就打不開軟件,但我開發的100多K的小軟件實在不必這樣,是直接在桌面運行的那種,因此想到將所有的依賴文件整合到exe文件中,網上查找了不少資料,下面說下過程。html
首先是IrisSkin2的使用方法:spring
初始化皮膚:post
Sunisoft.IrisSkin.SkinEngine se = new Sunisoft.IrisSkin.SkinEngine(); se.SkinAllForm = true;
設置皮膚:url
se.SkinFile="Skins/mdd_spring.ssk";
能夠看到很是簡單,調換皮SkinFile的值就能夠更換皮膚了,全部的皮膚名稱我放在一個Combox中。spa
下面是將文件整合:.net
將Properties\Resources.resx文件打開,在「添加資源」-「添加現有文件」,選擇皮膚文件就好了,Resources.resx這個文件自己是包括在exe中的code
其後是調用的問題:orm
有兩種調用方式:Properties.Resources.名稱 Properties.Resources.ResourceManager.GetObject("名稱"),因爲如今只知道名稱,因此使用第二種方式,返回式是Object類型,se.SkinFile是string類型,不兼容,SkinEngine還有一種設置皮膚的方法se.SkinStream,是Stream類型,因此要將Object轉化爲Streamhtm
先強制轉化爲byte[],而後轉化爲Streamblog
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