百度一下Winform皮肤控件,可以搜到很多免费或收费的皮肤控件,使用起来方便简单,
只需要设置一个皮肤文件的路径即可!
但是这个控件怎么实现对项目中每一个用户创建的Form进行样式渲染?
难道控件可以监控我什么时间创建Form? 这也太神奇了吧?

解决方案 »

  1.   

    我经常就是常用控件自己重载下自己定义一个INI皮肤文件,
    然后去读这个文件,读这个文件的方法是: public class ReadIniFile
        {
            // Methods
            public ReadIniFile()
            {
                this.path = Application.StartupPath;
                this.path = this.path + @"\SKIN.ini";
            }
            [DllImport("kernel32")]
            private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);        internal Color IniReadColor(string Section, string Key)
            {
                Color color1 = Color.Lavender;
                if (File.Exists(this.path))
                {
                    try
                    {
                        string text1 = ",";
                        StringBuilder builder1 = new StringBuilder(0xff);
                        ReadIniFile.GetPrivateProfileString(Section, Key, "", builder1, 0xff, this.path);
                        string text2 = builder1.ToString().Trim();
                        int num1 = text2.Length;
                        int num2 = text2.IndexOf(text1);
                        int num3 = Convert.ToInt32(text2.Substring(0, num2));
                        string text3 = text2.Substring(num2 + 1, (num1 - num2) - 1).Trim();
                        num1 = text3.Length;
                        int num4 = text3.IndexOf(text1);
                        int num5 = Convert.ToInt32(text3.Substring(0, num4));
                        int num6 = Convert.ToInt32(text3.Substring(num4 + 1, (num1 - num4) - 1));
                        color1 = Color.FromArgb(num3, num5, num6);
                    }
                    catch
                    {
                        return color1;
                    }
                }
                return color1;
            }
            internal bool IniReadRect(string Section, string Key, out int[] Num)
            {
                string text1 = ",";
                int[] numArray1 = new int[6];
                StringBuilder builder1 = new StringBuilder(0xff);
                ReadIniFile.GetPrivateProfileString(Section, Key, "", builder1, 0xff, this.path);
                int num1 = builder1.ToString().Length;
                int num2 = builder1.ToString().IndexOf(text1);
                int num3 = Convert.ToInt32(builder1.ToString().Substring(0, num2));
                string text2 = builder1.ToString().Substring(num2 + 1, (num1 - num2) - 1);
                num1 = text2.Length;
                int num4 = text2.IndexOf(text1);
                int num5 = Convert.ToInt32(text2.Substring(0, num4));
                string text3 = text2.ToString().Substring(num4 + 1, (num1 - num4) - 1);
                num1 = text3.Length;
                int num6 = text3.IndexOf(text1);
                int num7 = Convert.ToInt32(text3.Substring(0, num6));
                int num8 = Convert.ToInt32(text3.Substring(num6 + 1, (num1 - num6) - 1));
                numArray1[0] = num3;
                numArray1[1] = num5;
                numArray1[2] = num7;
                numArray1[3] = num8;
                Num = numArray1;
                return true;
            }
            internal string IniReadValue(string Section, string Key)
            {
                StringBuilder builder1 = new StringBuilder(0xff);
                ReadIniFile.GetPrivateProfileString(Section, Key, "", builder1, 0xff, this.path);
                return builder1.ToString();
            }
            // Fields
            private string path;
        }