WinForm换肤操作(用IrisSkin2.dll)

本篇文章主要讲解如何用IrisSkin2.dll来动态的对WinForm界面进行更换皮肤操作,在操作之前,应该确保有IrisSkin2.dll和一些稍微漂亮些的皮肤文件(以.ssk结尾),把它们放置在你自认为很合适的位置,为了演示用我把IrisSkin2.dll和皮肤文件放置在了应用程序的Debug下面,所有的皮肤文件放置在了以skin为命名的文件夹下如下图所示2011051217005945.jpg

skin文件夹下的皮肤文件和我自己定义的INI配置文件(此文件将会在后面讲到,关于INI配置文件的相关信息在我以上的文章中已提到过,在此不再详细讲解关于操作INI文件的文章链接地址是

http://www.cnblogs.com/wangsaiming/archive/2011/04/25/2028601.html

2011051217011776.jpg

现在先把我主要要实现什么样的功能和应用皮肤之后的效果图先截图下来,以便于后面的详细讲解。效果图如下:

2011051217064837.jpg2011051217074335.jpg

以下图示是效果图

2011051217080284.jpg2011051217103787.jpg

2011051217105960.jpg

在最上方的两个截图中,有个系统皮肤的子菜单项,子菜单项的内容不是输入进去的,而是在后台进行动态的绑定的,也就是说你的皮肤文件有多少个,在程序运行的时候

就会在系统皮肤的菜单项里添加多少个皮肤,你选中每个皮肤的时候这时界面就会随着你选中的皮肤更改而变化。

下面就具体的来讲解如何实现:

首先要引用IrisSkin2.dll文件,在工具箱的-->>常规栏下选择-->>选择项此时会弹出个窗口如下:2011051217241043.jpg

单击浏览按钮选择你要添加的IrisSkin2.dll之后,此时会在工具箱中发现该控件,把这个控件添加到窗体界面上就可以了。

现在可以来进行操作了;在窗体的加载时绑定自定义的绑定皮肤方法

代码如下:

  private void Form1_Load(object sender, EventArgs e)
        {
            BindSkinEngine();//调用绑定皮肤的方法
        }

下面是自定义的绑定皮肤的方法:

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
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 += new EventHandler(skinToolStripMenuItem_Click);

skinToolStripMenuItem_Click也是自定义的如下所示:

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
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();


}

讲到这里已经结束了,有个INI配置文件如下所示:2011051217402962.jpg

这个窗体操作时默认的配置文件。

讲的有点乱,要是不懂的可以来Q:1983512803

转载于:https://www.cnblogs.com/wangsaiming/archive/2011/05/12/2044626.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值