zoukankan      html  css  js  c++  java
  • C#程序控制皮肤

    2008-09-12 16:16
    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方法恢复系统默认皮肤

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

    摘自 http://hi.baidu.com/laosan925/blog/item/c71f05dd3f082cda8c10291c.html

  • 相关阅读:
    2018-2019-2 网络对抗技术 20165332 Exp2 后门原理与实践
    2018-2019-2 20165329《网络对抗技术》Exp9 Web安全基础
    2018-2019-2 网络对抗技术 20165329 Exp 8 Web基础
    20165329课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现
    2018-2019-2 网络对抗技术 20165329 Exp7 网络欺诈防范
    2018-2019-2 网络对抗技术 20165329 Exp6 信息搜集与漏洞扫描
    2018-2019-2 20165329《网络攻防技术》Exp5 MSF基础应用
    2018-2019-2 网络对抗技术 20165329 Exp4 恶意代码分析
    2018-2019-2 网络对抗技术 20165329 Exp3 免杀原理与实践
    2018-2019-2 网络对抗技术 20165329 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/xianyin05/p/1452342.html
Copyright © 2011-2022 走看看