C# WinForm 换肤
感谢http://blog.csdn.net/alldj/archive/2007/04/13/1564072.aspx作者提供的方法,让笔者实现了更换皮肤的功能。不过该页面的源程序始终无法下载,所以笔者开始只能复制上面列出的所有代码,然后在VS中运行。程序编译顺利通过,不过运行时出现了System.NullReferenceException的错误,显示IrisSkin2对象为空。于是笔者调试了一下,问题出现在这一句话:
se = new Sunisoft.IrisSkin.SkinEngine(Application.OpenForms[0], thisDll.GetManifestResourceStream("skintest.skin." + st.ToString() + ".ssk"));
"skintest.skin." + st.ToString() + ".ssk"字符串的路径不正确,所以初始化未能成功。仔细研究了一下,原来从网页上复制到VS中(使用的浏览器为Firefox 3.1),引号结束前多了一个空格,即上面字符串在VS中为
"skintest.skin. " + st.ToString() + ".ssk "
多了一个空格,导致程序的运行失败!
下面为笔者的源程序代码(点击下载):
程序截图如下:(Mdi窗体, VS 2005成功运行, Windows XP)
补充说明:
如果窗体中有第三方控件,则可能在调试的时候vs出现错误“Loaderlock was detected”错误,解决方法如下(网络收集):
1.改注册表
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework下面增加一个String,值为"0"
不过这样做,在该计算机上所有基于.NET2.0开发都得不到MDA的好处。
2.为项目增加一个配置文件.
3.直接修改项目设置
最简单的方法,在"Debug"菜单下----"Exceptions"----"Managed Debugging Assistants"中勾掉"LoaderLock")