如何美化你的.net 应用程序

简介:
利用.net技术能够快速开发出应用程序,但是如果应用微软的那一套技术,做出来的程序大多数程序员恐怕都会有一种千篇一律的感觉:按钮还是那个按钮(只是文字不同),文本框还是那个文本框, 下拉列表还是那个下拉列表........跟系统里的没有什么两样,不管程序怎么样,至少这个界面没什么新意。
        诚然,目前也有不少第三方的控件,如Xceed Ultimate Suite、ComponentOne.Studio、Infragistics.NetAdvantage等等,使用这些控件大多需要再花一定时间去掌握这些控件的用法,而且有些做得不是很好,我曾经见过一个商业控件里面很多是画出来的,不能像VS.net自带的控件那样在IDE上灵活控制,现在给大家展示一个很简单的换皮肤控件,先不说别的,让大家看看效果:
        看到上面的界面心动了吗?告诉大家,我用的都是VS2005的标准控件,实现换皮肤的功能也仅仅是数行代码而已,也就是说以前熟悉的控件还照常使用。
        先介绍一下这套控件吧,这套控件仅有一个dll(IrisSkin2.dll)文件和一个skin文件夹,skin文件夹下共有22个子文件夹,每个子文件夹其实就是一套界面风格,也就是说我们可以使用22种不同风格。
        实现给界面换皮肤有两种做法:(一)拷贝法,即使将界面资源夹下所有的文件拷贝到.exe文件所在的位置,然后在程序种通过skinEngine1.SkinFile=fileName(fileName是皮肤文件.ssk文件的位置)来设定界面皮肤,这种做法通常是我们需要在Debug文件夹和Release文件各保存一套皮肤文件,发布程序的时候也需要附带这些文件。(二)嵌入资源法,本文就是采用这种办法实现的,这样做的好处是发布程序时(不管是Debug版本或Release版本)时vs自动将皮肤文件编译进exe文件中,减少程序发布时文件的个数,而且也不用管程序与皮肤文件的相对位置。
        首先打开VS工具箱,添加皮肤控件组件,如下图:
        然后在出现的“选择工具箱项”中点击“浏览”按钮,然后找到IrisSkin2.dll文件,然后“确定”,关闭对话窗口之后,皮肤控件组件就会出现在你的工具箱上了(具体出现在哪个分组跟你添加时添加哪个组有关),如下图:
(我不小心加到打印分组去了,大家不要骂我:P)
        好了,现在可以编写程序测试了,做一个简单的窗体吧,界面上的控件如上图所示,然后将皮肤组件拖拽到界面上,之后需要把程序所需要的皮肤资源文件添加进来,这里我是采用添加资源的办法。
 
        步骤如下:
(一)在WinForm工程上右键单击“属性”,在出现的界面中点“资源”选项卡,把所需的皮肤资源文件添加进来(通过“添加现有文件”命令添加皮肤文件),如下图:
        注意如果该皮肤文件夹下除了*.ssk文件之外,还包含有其它图片文件,建议将它们也作为资源添加到项目中。添加完成之后,我们就可以在代码中通过Properties.Resources.文件名来获取这些文件的内容了,通过这个方法返回的是文件内容的二进制数据(byte[]),而skinEngine1.SkinStream需要的是一个Stream对象,通过msdn我们可以以这个二进制数据构建一个Stream对象(new MemoryStream(byte[] bytes)),然后赋值给皮肤组件的SkinStream属性,如果需要换皮肤,重新构建一个皮肤资源文件的Stream对象,然后重新赋值就行了。
 
         界面控件布局代码很简单,就不粘贴了,主要把后台代码放在这里吧(其实也很简单,不过需要注意,因为使用了MemoryStream对象,就需要在程序引用程序集部分添加对IO方面的引用:using System.IO;)
 
代码如下:
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.ComponentModel; 
InBlock.gif using System.Data; 
InBlock.gif using System.Drawing; 
InBlock.gif using System.Text; 
InBlock.gif using System.IO; 
InBlock.gif using System.Windows.Forms; 
InBlock.gif 
InBlock.gif namespace SkinForm 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// 说明:这是一个简单的WinForm应用程序,用来展示如何使用换皮肤控件来实现我们需要的漂亮界面,代码很简单。 
InBlock.gif         /// 作者:周公 
InBlock.gif         /// 时间:2008-1-8 
InBlock.gif         /// 首发地址:http://blog.csdn.net/zhoufoxcn 
InBlock.gif         /// </summary> 
InBlock.gif         public partial  class MainForm : Form 
InBlock.gif        { 
InBlock.gif                 private MemoryStream memoryStream; 
InBlock.gif                 public MainForm() 
InBlock.gif                { 
InBlock.gif                        InitializeComponent(); 
InBlock.gif                        SetSkinFile(Properties.Resources.MacOS); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 private  void btnOK_Click( object sender, EventArgs e) 
InBlock.gif                { 
InBlock.gif                         if (rbMacOS.Checked) 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.MacOS); 
InBlock.gif                        } 
InBlock.gif                         else  if (rbMP10.Checked) 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.MP101); 
InBlock.gif                        } 
InBlock.gif                         else  if (rbMSN.Checked) 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.MSN1); 
InBlock.gif                        } 
InBlock.gif                         else  if (rbPage.Checked) 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.Page); 
InBlock.gif                        } 
InBlock.gif                         else  if (rbRealOne.Checked) 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.RealOne1); 
InBlock.gif                        } 
InBlock.gif                         else  if (rbVista1.Checked) 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.vista1_green1); 
InBlock.gif                        } 
InBlock.gif                         else  if (rbVista2.Checked) 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.Vista2_color11); 
InBlock.gif                        } 
InBlock.gif                         else 
InBlock.gif                        { 
InBlock.gif                                SetSkinFile(Properties.Resources.XPBlue1); 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 private  void SetSkinFile( byte[] bytes) 
InBlock.gif                { 
InBlock.gif                        memoryStream= new MemoryStream(bytes); 
InBlock.gif                         //设置皮肤可以通过两种方式,一种是指定皮肤文件的位置, 
InBlock.gif                         //如skinEngine1.SkinFile=fileName(fileName是皮肤文件.ssk文件的位置) 
InBlock.gif                         //一种是指定皮肤文件的文件流,如本程序所示 
InBlock.gif                        skinEngine1.SkinStream = memoryStream; 
InBlock.gif                         
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
程序界面效果如上面所示。
 
本文提到的皮肤组件可以到: http://download.csdn.net/user/zhoufoxcn/下载。
 
        20081月10日答广大朋友的疑问:
(一)有的朋友怀疑在MDI窗口中是否可以很好运用,我觉得是可以的,可以在MDI子窗口中设置它的皮肤文件和父窗口一致,这样就做到了整个系统中所有界面皮肤风格一致了。
(二)原来我自己曾怀疑在系统对话框中不能很好运行,刚刚证实了一下,是可以的,无需再做任何特殊设置。运行情况如下:

这是在默认皮肤为MacOS的情况下弹出的颜色对话框,也是MacOS风格的,如下:
 








本文转自周金桥51CTO博客,原文链接: http://blog.51cto.com/zhoufoxcn/166048 ,如需转载请自行联系原作者


相关文章
|
4天前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
4天前
|
算法 Java 调度
|
8月前
|
安全 C# 开发工具
模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案
模拟.NET实际应用场景,综合应用三个主要知识点:一是使用dnSpy反编译第三库及调试,二是使用Lib.Harmony库实现第三库拦截、伪造,三是实现同一个库支持多版本同时引用。
模拟.NET应用场景,综合应用反编译、第三方库调试、拦截、一库多版本兼容方案
|
4天前
|
C#
一个库帮你轻松的创建漂亮的.NET控制台应用程序
一个库帮你轻松的创建漂亮的.NET控制台应用程序
|
4天前
|
XML 开发框架 .NET
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
15 1
|
4天前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
|
4天前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
4天前
|
机器学习/深度学习 人工智能 Cloud Native
【专栏】洞察.NET 技术的前沿应用
【4月更文挑战第29天】本文探讨了.NET技术的前沿应用,包括.NET Core的跨平台崛起、云原生及AI/机器学习领域的整合。.NET Core支持多平台运行,开源社区的参与促进了其快速发展和性能优化。Xamarin与.NET MAUI助力跨平台移动应用和统一界面开发,而云原生应用借助.NET Core与Azure云服务得以轻松构建和部署。此外,ML.NET和TensorFlow.NET为.NET开发者提供了机器学习和深度学习工具,推动智能应用和边缘计算的创新。.NET技术正持续演进,引领软件开发新趋势。
|
4天前
|
人工智能 物联网 开发者
【专栏】探究.NET 技术的创新应用
【4月更文挑战第29天】本文探讨了.NET技术的最新进展和创新应用,包括.NET 5及后续版本的统一平台、性能提升、跨平台支持、云集成优化和开源社区的贡献。在创新应用场景中,重点介绍了微服务架构、物联网、AI、游戏开发和移动应用。未来,.NET将持续优化性能,深化云原生应用,集成新兴技术,扩大社区生态,并促进相关教育和培训。开发者应把握.NET技术的潜力,积极参与其发展,创造更多创新软件产品。
|
4天前
|
安全 Linux API
【专栏】.NET 开发:打造卓越应用的秘诀
【4月更文挑战第29天】本文介绍了.NET技术的起源、核心特性和应用场景,揭示了其打造卓越应用的秘诀。自2002年推出,.NET历经发展,现支持跨平台,包括.NET Core和.NET 5。其核心特性包括:跨平台兼容性、面向对象编程、内置安全性和高效性能。丰富的类库、强大的开发工具、简洁的语言语法以及活跃的社区支持,使.NET成为构建高效、安全应用的理想选择。随着技术进步,.NET将持续赋能开发者创造更多可能性。