目标:为了使 winform 界面更美观,加深用户体验,可根据用户喜好选择皮肤。
设计思路:在 Winform 中采取存取配置文件的形式记忆用户选择的皮肤文件名及路径。
设计方法:使用基于 .net 开发的换肤控件 skinEngine ,将 IrisSkin2.dll (支持 .net2.0 )加至 vs2005 的工具箱中。即可进行开发了。
问题描述: 从配置文件中读取客户设置的皮肤文件路径时,有可能为空或文件不存在。这样的话,会导致 MDI 窗体的皮肤加载出现错误。
解决方法:当出现皮肤文件路径为空或文件不存在时,就不加载皮肤文件,即设置 skinEngine 的属性 Active 与 SkinAllForm 。
所以加载配置文件时加入如下判断:
// 获取客户端皮肤路径(mocklystone 2009-10-12)
this .skinEngine1.SkinFile = ConfigSettings .GetSkin("Skin" , "skinfile" );
string name = ConfigSettings .GetSkin("Skin" , "skinname" );
if (string .IsNullOrEmpty(this .skinEngine1.SkinFile)||!System.IO.File .Exists(skinEngine1.SkinFile))
{
this .skinEngine1.Active = false ; // 设置不加载皮肤
this .skinEngine1.SkinAllForm = false ; // 设置皮肤只在主窗体显示,不加载于其他所有的窗体
}
扩展知识: MDI 窗体加载
读取配置文件类
public class ConfigSettings
{
static string configPath = Application .StartupPath + "//config.ini" ;
// 导入非托管代码
[DllImport ("kernel32" )]
private static extern void WritePrivateProfileString(string section, string key, string value, string filePath);
[DllImport ("kernel32" )]
private static extern double GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
// 设置config.ini 的值
public static void SetValue(string section,string key, string value)
{
WritePrivateProfileString(section,key,value,configPath);
}
/// <summary>
/// 获取客户端的皮肤文件(mocklystone 2009-10-12)
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string GetSkin(string section, string key)
{
StringBuilder temp = new StringBuilder (100);
GetPrivateProfileString(section, key, "" , temp, 100, configPath);
return temp.ToString();
}
}
winfrom皮肤控件下载地址:http://download.youkuaiyun.com/source/2076416