关于winform主题IrisSkin2的编写
第一步:首先引用IrisSkin2.dll。
第二步自定义类:
/// <summary>
/// 窗体主题边界类
/// </summary>
public class FormSkin : SkinEngine
{
/// <summary>
/// 主题单例
/// </summary>
private static FormSkin Skin; /// <summary>
/// 构造函数
/// </summary>
/// <param name="path">皮肤文件的位置</param>
private FormSkin(string path)
{
_skinNames = new List<string>();
DicSkins = new Dictionary<string, string>();
GetSkins(path);
} /// <summary>
/// 主题存放位置
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static FormSkin CreateSkin(string path)
{
if (Skin == null)
{
Skin = new FormSkin(path); }
return Skin;
} #region 字段
/// <summary>
/// 主题名称
/// </summary>
private List<string> _skinNames ;
#endregion #region 属性
/// <summary>
/// 主题名称
/// </summary>
public string[] SkinNames { get { return _skinNames.ToArray(); } }
/// <summary>
/// 主题名称与路径的字典
/// </summary>
protected Dictionary<string, string> DicSkins { get; set; }
#endregion #region protected方法
/// <summary>
/// 获取主题信息
/// </summary>
/// <param name="path"></param>
protected virtual void GetSkins(string path)
{
foreach (string file in Directory.GetFiles(path, "*.ssk", SearchOption.AllDirectories))
{
int index = file.LastIndexOf(@"\");
var _name = file.Substring(index + 1, file.Length - index - 5).Trim();
if (!_skinNames.Contains(_name)) _skinNames.Add(_name);
if (!DicSkins.Keys.Contains(_name)) DicSkins.Add(_name, file);
}
}
#endregion #region public方法
/// <summary>
/// 设置皮肤
/// </summary>
/// <param name="key">根据名称</param>
/// <returns></returns>
public bool SetSkin(string key)
{
if (DicSkins.Keys.Contains(key))
{
var file = DicSkins[key]; if (File.Exists(file))
{
Skin.SkinFile = file;
return true;
}
}
return false;
}
#endregion
}
这个是我自己写的。不一定很好,你们也可以自定义,我是属于菜鸟级别的。哈哈。用了一个单例。 其实主要也就是这样一个类
主要原理 其实是很简单的:首先是创建单列的时候需要提供一个位置,然后根据这个位置去查找*.ssk文件也就是皮肤主题文件 ,然后把 主题名称用一个只读集合公开出来,注意我用的是String[]数组 而不是List<string> 至于这两个的细微区别我就不多说了。 然后把 主题名称和主题的存放位置存放起来 , 通过一个SetSkin来更换皮肤。
第三步:调用
//主题
Skin = LqwCourse.Base.FormSkin.CreateSkin(AppDomain.CurrentDomain.BaseDirectory);
Skin.SetSkin(Skin.SkinNames.Length > 0 ? Skin.SkinNames[0] : "");
下面是我自己弄的一个测试效果图

欢迎各位大侠指点一下。。 让我学习学习
关于winform主题IrisSkin2的编写的更多相关文章
- c# winform使用IrisSkin2换肤弹不出窗口解决方案
winform使用IrisSkin2换肤弹不出窗口解决方案 这张图能解决超级多博友的问题,知识是共享的,绝不私吞.共同学习,共同进步! 不需要说太多,只需1张图! ...
- Winform中使用代码编写Button按钮的点击事件
场景 一般在进行Winform窗体开发时都会拖拽一个Button,然后双击进入Button按钮的点击事件中,进行 点击事件的编写. 如果窗体上事先没有Button按钮,是在代码中生成的Button按钮 ...
- c#winform主题实现的一个方法
winform的主题实现没有bs里面那么舒服,下面做了一个简单实现,记录一下. 1.一个接口,需要做主题的控件.窗体都要实现这个接口 /// <summary> /// 使用主题的控件.窗 ...
- telerik WinForm主题切换
通过按钮或Form_Load中切换: ThemeResolutionService.ApplicationThemeName = "Windows 7"; //具体的主题名,不同的 ...
- WinForm使用皮肤图文步骤
Winfrom本身样式提供的是Windows经典样式.. 不说多丑也绝称不上好看..有时为了用户体验就不得不需要想办法弄漂亮一点..皮肤包会是一个不错的选择.. 不废话了..开整.. 首先从网上下载免 ...
- WordPress 主题框架是如何工作的
主题框架可以说是无比强大的!对于非技术型的 WordPress 用户来说,主题框架使得建立一个独一无二并看起来像是运行一个量身定制的主题的网站成为可能,并且对于 WordPress 开发者来说,它们能 ...
- WordPress主题制作全过程
前言: 我想大多数使用WordPress的朋友都喜欢去尝试新的主题,但是换来换去,总是找不到那么一款适合自己的,让人很郁闷.于是很多人萌生了修改现有主题或自己动手从头制作一个主题的想法,但是问题又来了 ...
- 编写高性能.NET程序-《Concurrency in .NET》(1)- 为什么要读这本书?
最近广州.NET微软技术俱乐部对如何编写高性能.NET程序发起了讨论. 首先是在ORM和SQL方面进行了讨论,主题当然是经久不衰的月经贴: EF性能很差. Edi.Wang专门写了一篇文章< ...
- winform窗体程序运行后怎样隐藏?
运行winform窗体,我们是怎样隐藏的呢? 例子: 1)创建简单winform窗体 2)编写隐藏窗体程序的代码 3)效果演示 1)创建一个简单的winform窗体MainForm,
随机推荐
- win7下搭建nginx+php的开发环境
本来在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目 ...
- LR:Code - 60990,Code - 10343 问题解决
Code - 60990 Error: Two Way Communication Error: Function two_way_comm_post_message /two_way_comm_po ...
- JQUERY1.9学习笔记 之基本过滤器(四) 首元素选择器
首元素选择器:jQuery( ":first" ) <!DOCTYPE html><html lang="zh-cn"><head ...
- PHP5中使用PDO连接数据库
PDO 如何连接 new PDO("mysql:host=localhost;dbname=php100","root", “ "); 默认这个不是 ...
- 操作css样式
<script type="text/javascript"> //产生一个四位的验证码. function createCode(){ var datas = ['A ...
- Linux_jdk path (execute and install)
作者:潇湘隐者 出处:http://www.cnblogs.com/kerrycode/ 1:echo $JAVA_HOME 使用$JAVA_HOME的话能定位JDK的安装路径的前提是配置了环境变量$ ...
- Android Recovery的汉化 显示中文
Android Recovery的汉化 显示中文,有需要的朋友可以参考下. 首先下载开源的recovery源码,地址为https://github.com/xiaolu/android_bootabl ...
- AdHoc发布时出现重复Provisioning Profile的解决方案
当在developer.apple.com更新Provisioning Profile(添加新机器)后,下载到本地,双击载入xcode,运行时没问题.但如果用adhoc发布,可能会发现重复的provi ...
- ural 1294 Mars Satellites
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> u ...
- shell中使用sqlplus及调试相关
五.为了安全要求每次执行shell都手工输入密码$ vi test5.sh #!/bin/bashecho -n "Enter password for u_test:"read ...