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方法恢复系统默认皮肤
大家可以不用直接给单独一个窗体换肤。我以上的代码是生成一个换肤菜单,然后所有的窗体都是自动进行换肤了。
另一篇:
/**************************************************************************************************************
* *
* 1、添加DLL文件IrisSkin2.dll。右击工程---->添加--->现有项------>找到 IrisSkin2.dll------->确定 *
* 2、更改IrisSkin2.dll属性:把 生成操作 改为“嵌入的资源” *
* 3、添加命名空间的引用:右击项目中的 引用----->添加...---->浏览----->找到IrisSkin2.dll----->确定 *
* 4、添加一个类,把以下代码复制进去。 *
* 5、在程序中调用 *
* *
* using zhxl.TestFace *
* *
* AppFace2005.ShowFace(@"D:/C#/C#换肤2005/MSN/MSN.ssk");//直接调用文件换肤 *
* AppFace2005.ChangeSkin(); //更改皮肤,系统会自动弹出窗体让选择SSK文件 *
* AppFace2005.RemoveSkin(); //清除皮肤 *
* *
**************************************************************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using Sunisoft.IrisSkin;
using System.Windows.Forms;
namespace zhxl.TestFace
{
class AppFace2005
{
public static Sunisoft.IrisSkin.SkinEngine skin = new SkinEngine();
/// <summary>
/// 显示皮肤
/// </summary>
/// <param name="sskFileName"></param>
public static void ShowFace(string sskFileName)
{
skin.SkinFile =sskFileName; //MP10.ssk是皮肤文件
skin.Active = true;
}
/// <summary>
/// 移除皮肤
/// </summary>
public static void RemoveSkin()
{
if (skin == null)
{
return;
}
else
{
skin.Active = false;
}
}
/// <summary>
/// 更改皮肤
/// </summary>
public static void ChangeSkin()
{
OpenFileDialog ofdlg = new OpenFileDialog();
ofdlg.Title = "切换皮肤--请选择皮肤文件";
ofdlg.FileName = "";
ofdlg.Filter = "皮肤文件(*.SSK)|*.ssk";
if (ofdlg.ShowDialog() == DialogResult.OK)
{ ShowFace(ofdlg.FileName); }
}
}
}
以下是应用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using zhxl.TestFace;
namespace TestFace
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void Form1_Load(object sender, EventArgs e)
{
AppFace2005.ShowFace(@"D:/C#/C#换肤2005/MSN/MSN.ssk");
}
private void 切换皮肤ToolStripMenuItem_Click(object sender, EventArgs e)
{
AppFace2005.ChangeSkin();
}
private void 清除皮肤ToolStripMenuItem_Click(object sender, EventArgs e)
{
AppFace2005.RemoveSkin();
}
private void 新建窗口ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
}
}