本篇文章主要讲解如何用IrisSkin2.dll来动态的对WinForm界面进行更换皮肤操作,在操作之前,应该确保有IrisSkin2.dll和一些稍微漂亮些的皮肤文件(以.ssk结尾),把它们放置在你自认为很合适的位置,为了演示用我把IrisSkin2.dll和皮肤文件放置在了应用程序的Debug下面,所有的皮肤文件放置在了以skin为命名的文件夹下如下图所示
skin文件夹下的皮肤文件和我自己定义的INI配置文件(此文件将会在后面讲到,关于INI配置文件的相关信息在我以上的文章中已提到过,在此不再详细讲解关于操作INI文件的文章链接地址是
http://www.cnblogs.com/wangsaiming/archive/2011/04/25/2028601.html
)
现在先把我主要要实现什么样的功能和应用皮肤之后的效果图先截图下来,以便于后面的详细讲解。效果图如下:
以下图示是效果图
在最上方的两个截图中,有个系统皮肤的子菜单项,子菜单项的内容不是输入进去的,而是在后台进行动态的绑定的,也就是说你的皮肤文件有多少个,在程序运行的时候
就会在系统皮肤的菜单项里添加多少个皮肤,你选中每个皮肤的时候这时界面就会随着你选中的皮肤更改而变化。
下面就具体的来讲解如何实现:
首先要引用IrisSkin2.dll文件,在工具箱的-->>常规栏下选择-->>选择项此时会弹出个窗口如下:
单击浏览按钮选择你要添加的IrisSkin2.dll之后,此时会在工具箱中发现该控件,把这个控件添加到窗体界面上就可以了。
现在可以来进行操作了;在窗体的加载时绑定自定义的绑定皮肤方法
代码如下:
private void Form1_Load(object sender, EventArgs e) { BindSkinEngine();//调用绑定皮肤的方法 }
下面是自定义的绑定皮肤的方法:
private void BindSkinEngine()
{
// 获取默认皮肤路径
INIFiles ini = new INIFiles(sSkinPath + @" \skin.ini " );
string currentSkin = ini.IniReadValue( " Current " , " Current " );
if (currentSkin.IndexOf( ' . ' ) != - 1 )
{
sSkInName = currentSkin.Split( ' . ' )[ 0 ];
}
skinEngine1.SkinFile = sSkinPath + " \\ " + currentSkin;
// 获取所有皮肤信息
if ( ! Directory.Exists(sSkinPath))
{
MessageBox.Show( " 系统皮肤加载失败! " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Error);
return ;
}
DirectoryInfo mydir = new DirectoryInfo(sSkinPath);
foreach (FileSystemInfo fsi in mydir.GetFileSystemInfos())
{
if (fsi is FileInfo)
{
// 读取皮肤文件夹的皮肤文件
FileInfo fi = (FileInfo)fsi;
string x = Path.GetDirectoryName(fi.FullName);
string s = Path.GetExtension(fi.FullName);
string y = Path.GetFileNameWithoutExtension(fi.FullName);
string f = Path.GetFileName(fi.FullName);
if (s == " .ssk " )
{
// 新建工具栏
ToolStripMenuItem skinToolStripMenuItem = new ToolStripMenuItem();
skinToolStripMenuItem.Name = y + " ToolStripMenuItem " ;
skinToolStripMenuItem.Size = new Size( 152 , 22 );
skinToolStripMenuItem.Text = y;
skinToolStripMenuItem.Click += new EventHandler(skinToolStripMenuItem_Click);
skinToolStripMenuItem.CheckOnClick = true ;
// 当前皮肤选中状态
if (f == currentSkin)
{
skinToolStripMenuItem.CheckState = CheckState.Checked;
}
else
{
skinToolStripMenuItem.CheckState = CheckState.Unchecked;
}
this .系统皮肤ToolStripMenuItem.DropDownItems.Add(skinToolStripMenuItem);
}
}
}
}
里面有个INIFiles这个是自定义操作INI文件的类(操作INI文件以前讲过(
),在此不再详细讲解)
sSkinPath和sSkInName是声明的变量
如下所示
#region "声明变量"
private string sSkInName = "" ;
private string sSkinPath = Application.StartupPath + @" \skin " ; // 获取皮肤的路径
#endregion
skinToolStripMenuItem_Click也是自定义的如下所示:
private void skinToolStripMenuItem_Click( object sender, EventArgs e)
{
// 改变选择状态
foreach (ToolStripMenuItem item in 系统皮肤ToolStripMenuItem.DropDownItems)
{
if (item.Text == sender.ToString())
{
item.CheckState = CheckState.Checked;
sSkInName = sender.ToString();
}
else
{
item.CheckState = CheckState.Unchecked;
}
}
// 换皮肤
skinEngine1.SkinFile = sSkinPath + " \\ " + sender.ToString() + " .ssk " ;
// 开机启动皮肤写入配置
INIFiles ini = new INIFiles(sSkinPath + @" \skin.ini " );
ini.IniWriteValue( " Current " , " Current " , sender.ToString() + " .ssk " );
this .UpdateStyles();
}
这个窗体操作时默认的配置文件。
讲的有点乱,要是不懂的可以来Q:1983512803