.NET程序界面探讨之1:Skin++篇

简介:
工作一直很忙,很久没有写博客了,有个朋友看过我的代码生成工具,觉得界面不错,随整理了一下界面代码,并加入了皮肤功能,现公布以飨读者。
可能做过Winform界面的朋友都知道,能够实现换肤的控件有很多,但做的比较不错的有如ActiveSkin、SkinCrafter、Irisskin、Skin++等等,不过都是收费的界面控件,这些控件很多来自C++的时代,但由于是OCX控件的方式,所以也可以使用到C#的Winform界面换肤中。
本人做过ActiveSkin、Skin++的界面换肤功能,觉得两者很是相似。现将Skin++的使用实现介绍如下。

1、定义一个Skin++控件变量用来存放。注意,该控件对象只要在主窗体中定义即可,其他派生的界面都会具有相同的皮肤效果。
public SKINPPVBCOMLib.SkinPPVBComDllClass SkinOb;//用来设置皮肤的控件变量
2、定义一个函数,用于加载相关的皮肤。
            try
            {
                
if (SkinOb == null)
                {
                    SkinOb 
= new SKINPPVBCOMLib.SkinPPVBComDllClass();
                }
                
if (skin != "" && skin.IndexOf(".ssk">= 0)
                {
                    
#region 设置按钮控件的效果,默认没有特殊效果
                       
//0 button 1 checkButton 2 RadioButton
                    SkinOb.SetButtonType2((int)this.cmbChooseDb.Control.Handle, 3);
                    
//SkinOb.SetButtonType2((int)this.fstChk_All.Handle, 1);
                    
//SkinOb.SetButtonType2((int)this.radStoreProc.Handle, 2);
                    #endregion

                    SkinOb.InitializeSkin(skin);
                }
                
else
                {
                    Marshal.ReleaseComObject(SkinOb);
                    SkinOb 
= null;
                    SetSystemRenderMode(
false);
                }

                
this.Hide();
                
this.Show();
            }
            
catch
            {
                EnableUIMenu(
false);
                MessageBox.Show(
"皮肤加载出错,请检查是否存在指定的皮肤文件!");
            }
在代码中添加 this .Hide(); this .Show(); 是为了更新界面,否则会出现一些界面效果还停留在原有效果上,这样处理一下就比较好了。
3、其他注意事项:
有时候您的项目代码是强名称的,那么也需要所引用的东西是强名称的才行,Skin++的控件对象默认是没有强名称的,需要强名称的话,那么执行下面的代码进行包装一下即可:
//把Com类型的控件用强名称进行包装,DOS命令
tlbimp SkinPPC#COM.dll /primary /keyfile:SharpCode.snk /out:SKINPPVBCOMLib.dll
另外要注意的是,如果在各种SKin++的定义皮肤中切换,效果很平滑,也很好,但是如果切换到系统默认的皮肤,总觉得界面有一些效果残留,不太好,因此最好提示软件客户重启软件。
4、界面各种皮肤效果如下
Skin1.jpg
Skin2.jpg
Skin3.jpg
Skin4.jpg
Skin5.jpg
默认没有皮肤的界面
Skin6.jpg
演示程序: http://files.cnblogs.com/wuhuacong/SkinPlusDemo.rar  

感兴趣的可以下载来研究研究,已经包含了上图的各种皮肤文件。

本文转自博客园伍华聪的博客,原文链接:.NET程序界面探讨之1:Skin++篇,如需转载请自行联系原博主。



目录
相关文章
|
4月前
|
域名解析 缓存 Linux
如何让你的.NET WebAPI程序支持HTTP3?
如何让你的.NET WebAPI程序支持HTTP3?
51 2
如何让你的.NET WebAPI程序支持HTTP3?
|
7月前
|
安全 Shell 数据库
「学习记录」.NET程序的数据库密码解密
「学习记录」.NET程序的数据库密码解密
|
8月前
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
98 0
|
前端开发 Ubuntu Linux
【.NET6+Avalonia】开发支持跨平台的仿WPF应用程序以及基于ubuntu系统的演示
随着跨平台越来越流行,.net core支持跨平台至今也有好几年的光景了。但是目前基于.net的跨平台,大多数还是在使用B/S架构的跨平台上;至于C/S架构,大部分人可能会选择QT进行开发,或者很早之前还有一款Mono可以支持.NET开发者进行开发跨平台应用。
870 0
【.NET6+Avalonia】开发支持跨平台的仿WPF应用程序以及基于ubuntu系统的演示
|
1天前
|
XML 开发框架 .NET
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集
11 4
|
6月前
|
开发框架 .NET 测试技术
.NET Core 日志记录程序和常用日志记录框架
本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用 首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控制器,接下来,我们的方法就在天气控制器里完成。
50 0
|
8月前
|
开发框架 .NET C#
如何判断一个 Dot Net 程序是 32 位还是 64 位?
如何判断一个 Dot Net 程序是 32 位还是 64 位?
|
4月前
|
开发框架 前端开发 小程序
分享46个ASP.NET博客程序源码,总有一款适合您
分享46个ASP.NET博客程序源码,总有一款适合您
34 0
|
5月前
|
存储 开发框架 .NET
Asp.Net第一章入门之后台处理程序
Asp.Net第一章入门之后台处理程序
31 0
|
7月前
|
开发框架 .NET Windows
windows 本地443端口被占用,ASP.NET Core程序拒绝访问
windows 本地443端口被占用,ASP.NET Core程序拒绝访问背景:本地的ASP.NET Core程序在配置了HTTPS并且监听443端口,通过https访问被拒绝,提示没有权限,输入swagger路径访问swagger也提示未找到相关页面。解决:一般情况下,访问我们的ASP.NET Core 程序的swagger页面并不需要什么权限,而且本地调试运行swagger文档也没有什...
60 1