C#中winform窗体的美化控件 iriskin(二)
2017-10-10 20:58
471 查看
本文的内容基于前一篇基础上面写的,利用创建类动态改变窗体的皮肤。
谨记假如在skin文件夹里已经有了我们添加的所有的换肤文件了,那么再按ctrl键选中所有的skin文件夹里的文件,在属性栏里可以看到“生成操作”一栏,默认选项是“无”,把它改成“嵌入的资源”方便后面程序的处理。
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
}
}
调用换皮肤的命令:
在主窗体里加上一个MenuStrip菜单,建一个2级菜单(如:风格→更换皮肤),然后在Form_Load事件里写上调用代码:
private void Form1_Load(object sender, EventArgs e)
{
SkinClass.AddSkinMenu(更换皮肤ToolStripMenuItem);
}
谨记假如在skin文件夹里已经有了我们添加的所有的换肤文件了,那么再按ctrl键选中所有的skin文件夹里的文件,在属性栏里可以看到“生成操作”一栏,默认选项是“无”,把它改成“嵌入的资源”方便后面程序的处理。
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
}
}
调用换皮肤的命令:
在主窗体里加上一个MenuStrip菜单,建一个2级菜单(如:风格→更换皮肤),然后在Form_Load事件里写上调用代码:
private void Form1_Load(object sender, EventArgs e)
{
SkinClass.AddSkinMenu(更换皮肤ToolStripMenuItem);
}
相关文章推荐
- C#中winform窗体的美化控件 iriskin(一)
- Skin控件 C# Winform窗体美化控件
- 利用IrisSkin2.dll皮肤控件美化WINFORM窗体!
- C#Winform控件随窗体缩放
- 【C#基础】之WinForm窗体常用控件的属性、方法及事件简介
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变
- C# Winform中窗体的美化—————— 用IrisSkin4.dll美化你的WinForm
- 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
- C# Winform 如何获得窗体上控件相对于屏幕的位置
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变
- C# Winform中窗体的美化——用IrisSkin4.dll美化你的WinForm
- C#WinForm制作异形窗体/控件
- C#中WinForm实现控件随窗体大小自适应改变
- C# winform 实现(不规则)窗体或者控件的拖动
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变(转)
- [转]c#有关winform的两个代码片段(多线程操作窗体控件与窗体淡入淡出效果)
- C# Winform 窗体美化(五、鼠标穿透)
- C# Winform MDI窗体,父窗体控件覆盖子窗体的解决办法
- C# Winform 窗体美化(十、自定义窗体)
- [SY的专栏]C#WinForm制作异形窗体/控件