代码改变世界

c#来对皮肤设置

2011-07-13 11:45  qinuo  阅读(395)  评论(0编辑  收藏  举报

首先,要做好准备工作,前三步都是准备钱的工作:
1:控件
下载地址: http://bbs.itjsj.com/thread-210635-1-1.html

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.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.Text;
                     skin.Tables[0].Rows.Add(dr);
                     skin.WriteXml("skin.xml", XmlWriteMode.IgnoreSchema);

                 }
                 else
                 {
                     ((ToolStripMenuItem)((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems).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);
                 }

             }
             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);
         }
上面两个方法是换肤用的小程序,更复杂的我就写不了了,我是做电话录音盒相关系统的,平时的工作也就是测试一下录音电话机什么的,听听电话录音,写程序也写,但是很少。希望对初学者有所帮助。

  文章由植物精油网录入