winform设置皮肤

利用 IrisSkin2.dll 所提供的控件 SkinEngine 来为窗体添加皮肤。

IrisSkin2.dll 及 皮肤素材,下载地址:https://www.360docs.net/doc/2215600614.html,/source/1744355

1. 先把IrisSkin2.dll文件添加到当前项目引用(解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin2.dll文件.....之后就不用我说了吧^_^).IrisSkin2.dll文件最好放在当前项目\bin\Debug文件中.

2. 然后把IrisSkin2.dll文件添加到vc2005的工具箱:右键->选择项->浏览找到IrisSkin2.dll文件(文件最好放在当前项目\bin\Debug文件中)按确定,控件就添加到工具箱中了.然后把工具箱中新添加的 SkinEngine控件拖到当前项目中。

3. 把皮肤目录中的.ssk文件复制到当前项目\bin\Debug文件中,(ssk文件可选).

4. 再在项目中调用.ssk皮肤文件。例:


namespace 当前项目

{

public partial class Form1 : Form

{

public Form1() //当前项目的构造器中调用皮肤文件

{

InitializeComponent();

this.skinEngine1.SkinFile = "DiamondBlue.ssk"; //DiamondBlue.ssk可换用皮肤目录中你喜欢的.ssk文件

}




}

}

注:恢复默认皮肤,只需要将this.skinEngine1.SkinFile = "DiamondBlue.ssk"; 这句注释掉或删除。

当然,大家也可以通过新建菜单实现一个单独的换肤功能,具体可参考:

[ZT]c# 程序皮肤控件
Visual Studio 2005工具箱上右击选择“选择项”,慢慢等...
在弹出的“选择工具箱项”选项卡中,点击“浏览”,找到IrisSkin2.dll存放的位置,双击,
你会发现多了个“SkinEngine”,确定。
将公共控件里的“SkinEngine”,拖到窗体上,将皮肤文件*.ssk在“解决方案资源管理器”中
添加到bin文件夹下的Debug文件夹下。(先复制皮肤文件*.ssk,在Debug文件夹上右击“粘贴”)
在初始化时加上一句:
using System;
using System.Collections.Generic;
using https://www.360docs.net/doc/2215600614.html,ponentModel;
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)和皮肤下载地址如下(用影音传送带等下载工具下载):

https://www.360docs.net/doc/2215600614.html,/down3/20070605/0514*******.rar

DEMO程序(含源码)

https://www.360docs.net/doc/2215600614.html,/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;
///


/// 增加换肤菜单
///

///
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;
}
}
}
///


/// 改变皮肤
///

///
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;
}
}
///
/// 移除皮肤
///

public static void RemoveSkin()
{
if (se == null)
{
return;
}
else
{
se.Active = false;
}
}
}
///
/// 换肤类型
///

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方法恢复系统默认皮肤

大家可以不用直接给单独一个窗体换肤。我以上的代码是生成一个换肤菜单,然后所有的窗体都是自动进行换肤了。


相关文档
最新文档