smhy8187

 

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

 如何美化你的.net 应用程序   文章指数:0  CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

利用.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;)

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace SkinForm
{
    
/// <summary>
    
/// 说明:这是一个简单的WinForm应用程序,用来展示如何使用换皮肤控件来实现我们需要的漂亮界面,代码很简单。
    
/// 作者:周公
    
/// 时间:2008-1-8
    
/// 首发地址:http://blog.csdn.net/zhoufoxcn
    
/// </summary>
    public partial class MainForm : Form
    {
        
private MemoryStream memoryStream;
        
public MainForm()
        {
            InitializeComponent();
            SetSkinFile(Properties.Resources.MacOS);
        }

        
private void btnOK_Click(object sender, EventArgs e)
        {
            
if (rbMacOS.Checked)
            {
                SetSkinFile(Properties.Resources.MacOS);
            }
            
else if (rbMP10.Checked)
            {
                SetSkinFile(Properties.Resources.MP101);
            }
            
else if (rbMSN.Checked)
            {
                SetSkinFile(Properties.Resources.MSN1);
            }
            
else if (rbPage.Checked)
            {
                SetSkinFile(Properties.Resources.Page);
            }
            
else if (rbRealOne.Checked)
            {
                SetSkinFile(Properties.Resources.RealOne1);
            }
            
else if (rbVista1.Checked)
            {
                SetSkinFile(Properties.Resources.vista1_green1);
            }
            
else if (rbVista2.Checked)
            {
                SetSkinFile(Properties.Resources.Vista2_color11);
            }
            
else
            {
                SetSkinFile(Properties.Resources.XPBlue1);
            }
        }

        
private void SetSkinFile(byte[] bytes)
        {
            memoryStream
=new MemoryStream(bytes);
            
//设置皮肤可以通过两种方式,一种是指定皮肤文件的位置,
            
//如skinEngine1.SkinFile=fileName(fileName是皮肤文件.ssk文件的位置)
            
//一种是指定皮肤文件的文件流,如本程序所示
            skinEngine1.SkinStream = memoryStream;
            
        }
    }
}

程序界面效果如上面所示。

本文提到的皮肤组件可以到:http://download.csdn.net/user/zhoufoxcn/下载。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2030818


[收藏到我的网摘]   [发送Trackback]  周公发表于 2008年01月08日 20:00:00

相关文章:


特别推荐: 关闭

评论

#  lashengcrh 发表于2008-01-09 09:16:22  IP: 125.33.193.*
想了解皮肤的开发方法,msn:lasheng@hotmail.com

#  wopos 发表于2008-01-09 11:03:20  IP: 218.20.134.*
试了,不错,要不要注册的?

#  zhoufoxcn 发表于2008-01-09 11:48:32  IP: 118.81.75.*
to wopos:
我目前用了,还没有需要注册的提示,我还不知道长时间用需要不要注册。我用的时间不长。

#  ken_sniper 发表于2008-01-09 13:47:09  IP: 222.244.36.*
好的东西,呵呵

#  kaka 发表于2008-01-09 14:10:27  IP: 210.21.17.*
在不同的操作系统里面表现怎么样?

比如在win2k ,winVista下面,效果会不会受到影响

#  zhoufoxcn 发表于2008-01-09 14:23:34  IP: 118.81.75.*
to kaka:
准确地说我没有在相关系统上测试,我使用的是WinXP,我觉得也许不会有什么差别,不过手头没有别的系统可以测试,如果有可能,请测试过的朋友告诉一下结果。

posted on 2008-01-09 16:24  new2008  阅读(433)  评论(0编辑  收藏  举报

导航