大哥大姐:   小弟使用VS08 C# 弄了个窗体软件, 现在主窗体上FORM1设置了皮肤, 主窗体FORM1是个登陆窗体, 然后我调用了一个FORM2工作窗体, 这个时候FORM1就隐藏了, 我想问问, 我能在在FORM2上点击按钮来修改皮肤吗, 怎么修改呢?
以上感谢各位!!!

解决方案 »

  1.   

    应该是可以的,看你是用哪种皮肤控件。一般都有接口让你可以调用的。比如IrisSkin:skinEngine = new Sunisoft.IrisSkin.SkinEngine()
    skinEngine.SkinAllForm = true;
    skinEngine.SkinFile = "Skin\\skin.ssk";
    if (!skinEngine.Active)
        skinEngine.Active = true;
      

  2.   

    首先先把IrisSkin2.dll文件添加到当前项目引用(解决方案资源管理器->当前项目->引用->右键->添加引用 ,找到IrisSkin2.dll文件.....之后就不用我说了吧^_^).IrisSkin2.dll文件最好放在当前项目\bin\Debug文件中.
    2,添加控件到工具箱;
    把IrisSkin2.dll文件添加到vc2005的工具箱:右键->选择项->浏览找到IrisSkin2.dll文件(文件最好放在当前项目\bin\Debug文件中)按确定,控件就添加到工具箱中了.然后把工具箱中新添加的 SkinEngine控件拖到当前项目中。
    3,找到你的皮肤文件,然后放到 项目的debug下,
    4 修改代码。在public Form1()
            {
                
                InitializeComponent();
                        }
    中的Initalizecomponent后加一句:this.skinEngine1.skinFile="文件名";
      

  3.   

    IrisSkin2.dll 文件我是放在DEBUG 下面, 而且我现在已经使用成功了皮肤, 我想在子窗体上做个换肤的按钮, 来换肤, 这样可以吗?
      

  4.   

    可以没问题改变 skinfile 就行。自己试试。
      

  5.   

    我在其他的窗体代码下 不让我用  skinEngine1.SkinFile
      

  6.   

    skinEngine = new Sunisoft.IrisSkin.SkinEngine()
     过啊, 但是不行
      

  7.   

    什么错误。你的代码?完整点贴一下其实IrisSkin的帮助文档满全的
      

  8.   

     就是主窗体上FORM1设置了皮肤, 主窗体FORM1是个登陆窗体, 然后我调用了一个FORM2工作窗体, 这个时候FORM1就隐藏了, 皮肤效果都实现了,  
     
        我想问问, 我能在在FORM2上通过点击按钮来改变皮肤吗, 怎么修改呢?
      

  9.   


      private void Form1_Load(object sender, EventArgs e)
            {
                onload();
            }        private void button1_Click(object sender, EventArgs e)
            {
                string path = Application.StartupPath + @"\skin";
                
                DirectoryInfo imagefile = new DirectoryInfo(path);
                FileInfo[] fileinfo = imagefile.GetFiles("*.ssk");
                for (int i = 0; i < fileinfo.Length; i++)
                {
                    comboBox1.Items.Add(fileinfo[i].Name);
                }
                comboBox1.SelectedIndex = 1;
            }
            private void onload()
            {
                string path = Application.StartupPath + @"\Config.ini";
                StreamReader dr = new StreamReader(path, Encoding.GetEncoding("GB2312"));
                string s = dr.ReadLine();
                string[] st = s.Split(new char[] { '=' });
                skinEngine1.SkinFile = @"skin\" + st[1];
                dr.Close();
            }        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                //string path = Application.StartupPath + @"\Config.ini";
                //StreamWriter dr = new StreamWriter(path, true, Encoding.GetEncoding("gb2312"));            //string st = "skin=" + comboBox1.Text;
                //dr.Write(st);
                //dr.Flush();
                //dr.Close();
                //onload();
                skinEngine1.SkinFile = @"skin\" + comboBox1.Text;
            }        private void button2_Click(object sender, EventArgs e)
            {
                MessageBox.Show("当前皮肤" + comboBox1.Text, "友情提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }bin/Debug/skin 里面放全部的ssk皮肤文件
    拖2个按钮 一个comboBox1谢谢采纳
      

  10.   

    onload不要了 没用 我原来是定义可以保存窗体的皮肤的  就先点按钮1就可以读取了 然后下拉选择 
    皮肤就变了 有什么不懂的继续
      

  11.   

    我在FORM1 里面使用的skinEngine1 , 你上面的代码我在FORM2 里面用, 好像不能直接用skinEngine1.SkinFile = @"skin\" + comboBox1.Text;
      

  12.   

    那你就在往FORM2 上拖一个 控件 就好了
      

  13.   

    做个基类Form,拖个上去,然后所有Form都继承它,然后没有然后了。所有Form都能改了
      

  14.   

    为什么我在FORM2上换的只是FORM2的皮肤啊, form1 不便啊????
      

  15.   

    为什么我在FORM2上换的只是FORM2的皮肤啊, form1 不便啊????
      

  16.   

    你的意思是皮肤可以影响所有窗体?那么不要把控件定义在一个窗体上了,放到Program类下面
      

  17.   

    我有皮肤啊, IrisSkin2.dll 已经引用了, 现在改变主窗体 子窗体跟着变, 但是反过来怎么做呢???