第一步:首先引用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的编写的更多相关文章

  1. c# winform使用IrisSkin2换肤弹不出窗口解决方案

    winform使用IrisSkin2换肤弹不出窗口解决方案 这张图能解决超级多博友的问题,知识是共享的,绝不私吞.共同学习,共同进步! 不需要说太多,只需1张图!                    ...

  2. Winform中使用代码编写Button按钮的点击事件

    场景 一般在进行Winform窗体开发时都会拖拽一个Button,然后双击进入Button按钮的点击事件中,进行 点击事件的编写. 如果窗体上事先没有Button按钮,是在代码中生成的Button按钮 ...

  3. c#winform主题实现的一个方法

    winform的主题实现没有bs里面那么舒服,下面做了一个简单实现,记录一下. 1.一个接口,需要做主题的控件.窗体都要实现这个接口 /// <summary> /// 使用主题的控件.窗 ...

  4. telerik WinForm主题切换

    通过按钮或Form_Load中切换: ThemeResolutionService.ApplicationThemeName = "Windows 7"; //具体的主题名,不同的 ...

  5. WinForm使用皮肤图文步骤

    Winfrom本身样式提供的是Windows经典样式.. 不说多丑也绝称不上好看..有时为了用户体验就不得不需要想办法弄漂亮一点..皮肤包会是一个不错的选择.. 不废话了..开整.. 首先从网上下载免 ...

  6. WordPress 主题框架是如何工作的

    主题框架可以说是无比强大的!对于非技术型的 WordPress 用户来说,主题框架使得建立一个独一无二并看起来像是运行一个量身定制的主题的网站成为可能,并且对于 WordPress 开发者来说,它们能 ...

  7. WordPress主题制作全过程

    前言: 我想大多数使用WordPress的朋友都喜欢去尝试新的主题,但是换来换去,总是找不到那么一款适合自己的,让人很郁闷.于是很多人萌生了修改现有主题或自己动手从头制作一个主题的想法,但是问题又来了 ...

  8. 编写高性能.NET程序-《Concurrency in .NET》(1)- 为什么要读这本书?

    最近广州.NET微软技术俱乐部对如何编写高性能.NET程序发起了讨论.   首先是在ORM和SQL方面进行了讨论,主题当然是经久不衰的月经贴: EF性能很差. Edi.Wang专门写了一篇文章< ...

  9. winform窗体程序运行后怎样隐藏?

    运行winform窗体,我们是怎样隐藏的呢? 例子: 1)创建简单winform窗体 2)编写隐藏窗体程序的代码 3)效果演示 1)创建一个简单的winform窗体MainForm,

随机推荐

  1. OREACLE 数据库建表 添加判断表是否存在 不存在则新建

    declare  cnt number; begin   ---查询要创建的表是否存在   select count(*)into cnt from user_tables where table_n ...

  2. 堆/栈的比较 以及 malloc/new动态内存的开辟

    堆与栈的比较:1.申请方式(1)栈(satck):由系统自动分配.(2)堆(heap):需程序员自己申请(c:调用malloc,realloc,calloc申请 free 来释放),并指明大小,并由程 ...

  3. Supervisor的一些基础使用

    Supervisor是一个进程监控程序. 满足的需求是:我现在有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...

  4. ios 实时刷新屏幕

    index=; // timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:layer selector:@selector(setNe ...

  5. phpcms V9 联动菜单的调用

    /*********************************** 通过id获取显示联动菜单的 顶级父类的名称* @param  $linkageid 联动菜单id* @param  $keyi ...

  6. Python文件处理之文件打开方式(一)

    Python中打开一个文件是同过open函数来打开的,并返回一个文件对象,以下为open函数的参数: open(name[, mode[buf]]) name:文件路径 mode:打开方式 buf:缓 ...

  7. 《python基础教程》笔记之 字典

    字典创建 字典由多个键值对组成,每个键和对应值之间用冒号隔开,项之间用逗号隔开,而整个字典用一对大括号括起来,如 >>> phonebook={'alice':'0123', 'Be ...

  8. C语言初学 简单计算器计算加减乘除程序

    #include<stdio.h> main() { float a,b; char c; printf("输入表达式如a+(* -  /)b:\n"); scanf( ...

  9. codevs 1061 重复子串

    题目描述 Description 某电视台在每一个星期天都有一个福利彩票节目,在该节目中有一个考察幸运观众记忆力的节目.节目的安排是这样的:首先由节目主持人说出一串诸如“左1右2左2左3右4左1”的数 ...

  10. angularjs 1.3 综合学习 (one way bind , ng-if , ng-switch , ng-messages, ng-form ,ng-model )

    主要讲解1.3后的一些新功能,和一些以前没有介绍的小功能 (ng-if,ng-switch). 1.one way bind 这个之前的版本已经有人自己实现了,但是在1.3之后,angularjs 有 ...