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

一个关于IrisSkin皮肤控件的问题

  se = new SkinEngine(Application.OpenForms[0], thisdll.GetManifestResourceStream("deneb.amr.skin." + st.ToString() + ".ssk"));
                for (int i = 0; i < Application.OpenForms.Count; i++)
                {
                    se.AddForm(Application.OpenForms[i]);
                } 

我在Form中使用了TabControl,所以当哪个TabPage先打开,哪个就皮肤生效了,后打开的tabPage皮肤就不起作用,该怎么解决啊 --------------------编程问答-------------------- 想从代码的修改来解决不太好弄, 不过上百度搜下skin的正确初始化用法, 应该可以解决. --------------------编程问答-------------------- 你在TabControl的变换改变事件里修改文件可以实现你的功能 --------------------编程问答-------------------- 我建议你不用这个垃圾控件,你会有意想不到的崩溃 --------------------编程问答-------------------- 对三楼说的话赞成一半。

虽然SkinEngine不一定会造成你程序的崩溃,
但是我觉得这个控件带来的种种不可预测的效果,
和不怎么理想的卡UI界面,
我就没用了。 --------------------编程问答-------------------- 楼主,
你不需要对所有Form都进行SkinEngine.AddForm操作
你只需要对MdiParent进行SkinEngine.AddForm(MdiParentFrm)
然后MdiParent的所有子Form都会有样式效果出现的。
--------------------编程问答-------------------- --------------------编程问答-------------------- 以前写过类似的,也用IrisSkin
  public class SuperSKin
    {
     
        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)
            {

                se = new Sunisoft.IrisSkin.SkinEngine(Application.OpenForms[0], thisDll.GetManifestResourceStream("FlashBulkEncryption.skin." + st.ToString() + ".ssk"));
                se.Active = true;
                for (int i = 0; i < Application.OpenForms.Count; i++)
                {
                    se.AddForm(Application.OpenForms[i]);
                }

            }
            else
            {              
                se.SkinStream = thisDll.GetManifestResourceStream("FlashBulkEncryption.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,
        DiamondBlue,
        Eighteen,
        Emerald,
        GlassBrown,
        Longhorn,
        MacOS,
        Midsummer,
        MP10,
        MSN,
        OneBlue,
        Page,
        RealOne,
        Silver,
        SportsBlack,
        SteelBlack,
        SteelBlue,
        vista1,
        Vista2,
        vista1_green,
        Vista2_color1,
        Vista2_color2,
        Vista2_color3,
        Vista2_color4,
        Vista2_color5,
        Vista2_color6,
        Vista2_color7,
        Warm,
        Wave,
        XPSilver
    }

应用: SuperSKin.AddSkinMenu(选择皮肤ToolStripMenuItem); 
//用的ToolStripMenuItem控件选择不同皮肤 --------------------编程问答--------------------
引用 3 楼 crackdung 的回复:
我建议你不用这个垃圾控件,你会有意想不到的崩溃


果然,C#2010一个toolbar老是崩溃,其他界面还没发现。 --------------------编程问答-------------------- DotNetBar界面还不错。 --------------------编程问答--------------------
引用 9 楼 fanbingyuan 的回复:
DotNetBar界面还不错。


我搜到一个叫DotnetSkin的组件,用着还行,请问跟你说的一样吗? --------------------编程问答-------------------- Look and study

贴图片很累吧,用《Csdn收音机》截图功能轻松解决! --------------------编程问答-------------------- 使用皮肤控件 毛病多多 --------------------编程问答-------------------- 不建议使用IrisSkin,各种卡界面,卡UI,建议还是自己有空时研究下美化控件 --------------------编程问答-------------------- 把TABPAGE中的几个TAB都做成用户自定义控件,然后在第一个界面全都初始化,然后当切换第二个时显示,这样就能挂上皮肤了
--------------------编程问答-------------------- 呵呵。。。。。。。。。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,