Visual Studio 2005工具箱上右擊選擇“選擇項”,慢慢等...
在彈出的“選擇工具箱項”選項卡中,點擊“瀏覽”,找到IrisSkin2.dll存放的位置,雙擊,
你會發現多了個“SkinEngine”,確定。
將公用控制項裡的“SkinEngine”,拖到表單上,將皮膚檔案*.ssk在“方案總管”中
添加到bin檔案夾下的Debug檔案夾下。(先複製皮膚檔案*.ssk,在Debug檔案夾上右擊“粘貼”)
在初始化時加上一句:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.skinEngine1.SkinFile = "*.ssk";
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
恢複預設皮膚請將紅色語句注釋或刪除
_______________________________________
1:控制項(破解版,只限.Net2005)和皮膚如下(用影音傳送帶等下載工具下載):
http://download1.csdn.net/down3/20070605/05142029888.rar
DEMO程式(含源碼)
http://dl2.csdn.net/down4/20070628/28181121698.rar
2:載入
下載後的rar檔案裡有一個IrisSkin2.dll和一個skin檔案夾。
添加引用,將IrisSkin2.dll引用進項目中。
然後在方案總管裡右擊項目→添加→建立檔案夾,檔案夾名為skin。
建完skin檔案夾後再右擊這個檔案夾→添加→現有項,在彈出的檔案選擇框裡選*.*所有檔案,再把解壓出來的skin檔案夾裡的所有檔案全選進去。
這時候我們可以看到skin檔案夾裡已經有了我們添加的所有的換膚檔案了。再按ctrl鍵選中所有的skin檔案夾裡的檔案,在屬性欄裡可以看到“產生操作”一欄,預設選項是“無”,我們把它改成“內嵌資源”。
3:類
下面我們建立一個類,把以下的代碼複製進去,別忘了把命名空間改成你自己的。
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
//TestSkin命令空間,別忘了改成你自己的。
namespace TestSkin
{
class SkinClass
{
public static Sunisoft.IrisSkin.SkinEngine se = null;
/// <summary>
/// 增加換膚菜單
/// </summary>
/// <param name= "toolMenu "> </param>
public static void AddSkinMenu(ToolStripMenuItem toolMenu)
{
DataSet skin = new DataSet();
try
{
skin.ReadXml( "skin.xml ", XmlReadMode.Auto);
}
catch
{
}
if (skin == null || skin.Tables.Count < 1)
{
skin = new DataSet();
skin.Tables.Add( "skin ");
skin.Tables[ "skin "].Columns.Add( "style ");
System.Data.DataRow dr = skin.Tables[ "skin "].NewRow();
dr[0] = "系統預設 ";
skin.Tables[0].Rows.Add(dr);
skin.WriteXml( "skin.xml ", XmlWriteMode.IgnoreSchema);
}
foreach (SkinType st in (SkinType[])System.Enum.GetValues(typeof(SkinType)))
{
toolMenu.DropDownItems.Add(new ToolStripMenuItem(st.ToString()));
toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1].Click += new EventHandler(frm_Main_Click);
if (st.ToString() == skin.Tables[0].Rows[0][0].ToString())
{
((ToolStripMenuItem)toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1]).Checked = true;
frm_Main_Click(toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1], null);
}
}
toolMenu.DropDownItems.Add(new ToolStripMenuItem( "系統預設 "));
toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1].Click += new EventHandler(frm_Main_Click);
if (skin.Tables[0].Rows[0][0].ToString() == "系統預設 ")
{
((ToolStripMenuItem)toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1]).Checked = true;
}
}
static void frm_Main_Click(object sender, EventArgs e)
{
for (int i = 0; i < ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems.Count; i++)
{
if (((ToolStripMenuItem)sender).Text == ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i].Text)
{
((ToolStripMenuItem)sender).CheckState = CheckState.Checked;
DataSet skin = new DataSet();
skin.Tables.Add( "skin ");
skin.Tables[ "skin "].Columns.Add( "style ");
System.Data.DataRow dr = skin.Tables[ "skin "].NewRow();
dr[0] = ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i].Text;
skin.Tables[0].Rows.Add(dr);
skin.WriteXml( "skin.xml ", XmlWriteMode.IgnoreSchema);
}
else
{
((ToolStripMenuItem)((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i]).CheckState = CheckState.Unchecked;
}
}
if (((ToolStripMenuItem)sender).Text == "系統預設 ")
{
RemoveSkin();
DataSet skin = new DataSet();
skin.Tables.Add( "skin ");
skin.Tables[ "skin "].Columns.Add( "style ");
System.Data.DataRow dr = skin.Tables[ "skin "].NewRow();
dr[0] = "系統預設 ";
skin.Tables[0].Rows.Add(dr);
skin.WriteXml( "skin.xml ", XmlWriteMode.IgnoreSchema);
return;
}
foreach (SkinType st in (SkinType[])System.Enum.GetValues(typeof(SkinType)))
{
if (st.ToString() == ((ToolStripMenuItem)sender).Text)
{
ChangeSkin(st);
return;
}
}
}
/// <summary>
/// 改變皮膚
/// </summary>
/// <param name= "st "> </param>
public static void ChangeSkin(SkinType st)
{
System.Reflection.Assembly thisDll = System.Reflection.Assembly.GetExecutingAssembly();
if (se == null)
{
//TestSkin是指命名空間,這裡你可以換成你自己的。
se = new Sunisoft.IrisSkin.SkinEngine(Application.OpenForms[0], thisDll.GetManifestResourceStream( "TestSkin.skin. " + st.ToString() + ".ssk "));
se.Active = true;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
se.AddForm(Application.OpenForms[i]);
}
}
else
{
//TestSkin是指命名空間,這裡你可以換成你自己的。
se.SkinStream = thisDll.GetManifestResourceStream( "TestSkin.skin. " + st.ToString() + ".ssk ");
se.Active = true;
}
}
/// <summary>
/// 移除皮膚
/// </summary>
public static void RemoveSkin()
{
if (se == null)
{
return;
}
else
{
se.Active = false;
}
}
}
/// <summary>
/// 換膚類型
/// </summary>
public enum SkinType
{
Calmness,
DeepCyan,
Eighteen,
Emerald,
GlassBrown,
Longhorn,
MacOS,
Midsummer,
MP10,
MSN,
OneBlue,
Page,
RealOne,
Silver,
SportsBlack,
SteelBlack,
vista1,
Vista2,
Warm,
Wave,
XPSilver
}
}
4:調用
在你的主表單裡加上一個MenuStrip菜單,建一個2級菜單(如:檔案→更換皮膚),然後在Form_Load事件裡寫上調用代碼:
private void Form1_Load(object sender, EventArgs e)
{
//“更換皮膚ToolStripMenuItem” 是上面例子裡“更換皮膚”這個ToolStripMenuItem的Name。
SkinClass.AddSkinMenu(更換皮膚ToolStripMenuItem);
}
5:注
以下兩個方法是主要換膚用的:
ChangeSkin方法換膚
RemoveSkin方法恢複系統預設皮膚
大家可以不用直接給單獨一個表單換膚。我以上的代碼是產生一個換膚菜單,然後所有的表單都是自動進行換膚了。