当前位置:编程学习 > C#/ASP.NET >>

有人用过吗? SkinEngine1 IrisSkin2.dll

我在C#下使用了IrisSkin2.dll控件
在一个窗口下可以正常加入此控件可以正常使用
但是在MDI中加入 无论是加在父窗口还是子窗口里 都会出现错误        Application.Run(new FrmContainer()); 错误代码
未将对象引用设置到对象的实例
请问是控件的问题 还是我自己写的代码中有问题 ??
知道的高手请帮忙解决一下 。。。 
--------------------编程问答-------------------- 这个直接在main里调用就可以了  但用前要注册
我就这么用的 --------------------编程问答-------------------- 这是一个换窗体皮肤的包
加上一句:this.SkinEngine1.skinFile="文件名";
(ssk)文件格式 --------------------编程问答-------------------- 大哥们 使用方法我都会 只是在MDI窗口下不行 。。。 --------------------编程问答-------------------- 我有办法:
先前贴的这篇文章大家可能觉的不太能理解,我注释也确实写的很少,步骤也不是很详细,现在重修改一下,希望大家能指正。

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

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




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1564072

我这可是引用别人的话!不用谢我!
QQ:8709325
--------------------编程问答-------------------- 应该是你的代码问题``


IrisSkin2.dll 我一直在用``

   只需要在第一个窗体(如:登陆窗体)上托个皮肤控件``只要之后的窗体都在主线程中``那么之后所有的窗体都带皮肤效果``不用每个窗体都加控件```
   如果另外开线程显示其他窗体``那么需要另外加控件``但是一般我在另开线程的时候``都是采用invoke()操作窗体``托管新开线程执行后台操作``这样既不用再托控件倒窗体显示皮肤``又完成目标效果`` --------------------编程问答-------------------- 另,
我用的是IrisSkin2.dll破解文件``不是正版``
破解文件我的Blog有下`` --------------------编程问答-------------------- 强烈同意楼上的,我也是一直这样用的 --------------------编程问答-------------------- 不知是什么东东? --------------------编程问答-------------------- 那这种文件格式.ssk是什么文件
--------------------编程问答-------------------- 这个工具很不错的!就是内存占用大了一点SSK是皮肤文件

这个控件调用的时候个人感觉很奇怪,会有一些特殊的BUG,但是只要细心调试就没有问题
         public MainForm()
        {
            InitializeComponent();
            //Program.skinpath 为皮肤路径
            skinEngine1.SkinFile = Program.skinpath;
            Login login;
            login = new Login();
            login.ShowDialog();
            LoginZt = login.Zt;
            login.Dispose();
            closeZt = 1;
        }
包括MDI自窗体,父窗体,还有系统的一些窗体全部会被皮肤效果附加上。 --------------------编程问答-------------------- 你这个错误我也遇到过,应该是 skinEngine1.SkinFile = Program.skinpath;  付值的位置放错了!可以试着换下位置!这样就好了! --------------------编程问答--------------------  1).  添加控件IrisSkin2.dll
 2).把皮肤文件中以ssk为后缀名的文件(如OneGreen.ssk)放在bin文件夹的debug文件夹里
 3).SkinEngine1.ShinFile = OneGreen.ssk;
--------------------编程问答-------------------- skinfeature.DotNet 完全支持c#全面换肤,一句代码切换皮肤。
推荐一下 。 http://www.skinfeature.com/setupdotnet.msi --------------------编程问答-------------------- 如果把程序设为开机自启动

则开机启动时,会报错

而且皮肤显示不了 --------------------编程问答-------------------- 我现在遇到一个问题就是更新一直很慢,MDI中我打开一个窗口后关闭但他显示的状态好像程序死机了一样,但点击菜单栏的其他功能都可以正常使用就是没办法把要关闭的窗口给去掉,着实地郁闷 --------------------编程问答-------------------- 我也遇到这个问题! --------------------编程问答-------------------- 肯定是你搞错了!
可以用的不过效果差拉那么一点点了! --------------------编程问答-------------------- 谢谢..
--------------------编程问答-------------------- shishi --------------------编程问答-------------------- 我开始也是用这个,但是后来发现有问题,比如说,用完这皮肤后,修改字体的颜色,前太不显示,还有一些其他的问题,不知大家有没有遇到过,我现在用DoNetSkin,可以试一下,个人感觉还不错 --------------------编程问答-------------------- 有位朋友提醒你了,使用之前要注册 注册一下试下
可以查一下怎么注册dll文件  regsvr32用这个命令 --------------------编程问答-------------------- 这么老的贴都有人翻出来。。。
--------------------编程问答-------------------- 非常实用 正在用 --------------------编程问答-------------------- 我用了一个,如果不是破解版,10天后会样式就变了,破解版我刚用,先看看情况,如果也有问题就不要用了! --------------------编程问答-------------------- 1、你先下载控件IrisSkin2.dll 将它添加引用中
2、在你项目的起始页面写如下代码:
 public LoginForm()
        {
            InitializeComponent();
            this.skinEngine1.SkinFile = "Wave.ssk";
        }
试试 我测试了的。。。。。 --------------------编程问答-------------------- 呵呵 .没有用过 --------------------编程问答-------------------- 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文件夹里的文件,在属性栏里可以看到“生成操作”一栏,默认选项是“无”,我们把它改成“嵌入的资源”。 
--------------------编程问答-------------------- 楼主真给力!我昨天刚在用你就贴出来啦!我想说的是你能否在工具栏找到该控件?把皮肤文件中以ssk为后缀名的文件是否(如OneGreen.ssk)放在bin文件夹的debug文件夹里?
--------------------编程问答-------------------- 有支持VS2010的吗? --------------------编程问答-------------------- 是啊,vs2010运行时报错啊 --------------------编程问答-------------------- 在程序启动时加入这行语句试试看           
 this.skinEngine1.SkinFile = "MP10.ssk";//--调用更改皮肤颜色的组件
            this.MaximizeBox = false; --------------------编程问答-------------------- 如何恢复到系统默认皮肤呢? --------------------编程问答--------------------
引用 32 楼  的回复:
如何恢复到系统默认皮肤呢?


this.skinEngine.Active = false; --------------------编程问答-------------------- 用這個真的沒意思的,垃圾到極點
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,