如何美化你的.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;)

代码如下:

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/下载。

20081月10日答广大朋友的疑问:
(一)有的朋友怀疑在MDI窗口中是否可以很好运用,我觉得是可以的,可以在MDI子窗口中设置它的皮肤文件和父窗口一致,这样就做到了整个系统中所有界面皮肤风格一致了。
(二)原来我自己曾怀疑在系统对话框中不能很好运行,刚刚证实了一下,是可以的,无需再做任何特殊设置。运行情况如下:

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

  • 0
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 84
    评论
分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,而且有时候我们需要对DataList和Repeater甚至自定义数据绑定控件进行分页,手工编写分页代码不但技术难度大、任务繁琐而且代码重用率极低,因此分页已成为许多ASP.NET程序员最头疼的问题之一。 AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。 AspNetPager 7.2 版发布 新增属性 PagingButtonLayoutType,可设置分页导航元素(数字页索引、上页、下页、首页和尾页)的布局方式,该属性值是一个PagingButtonLayoutType枚举,通过设置该属性为PagingButtonLayoutType.UnorderedList或PagingButtonLayoutType.Span,允许将这些分页导航元素包含在 与或与标签之间,以便于为这些分页元素应用CSS样式。 新增 PagingButtonClass 与 PagingButtonStyle 属性,可以单独为分页导航按钮(数字页索引、上页、下页、首页和尾页)设置CSS样式; 新增 FirstLastButtonClass 与 FirstLastButtonStyle 属性,可以单独为首页和尾页分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则首页和尾页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增 NextPrevButtonClass 与 NextPrevButtonStyle 属性,可以单独为上页和下页分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则上页和下页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增 MoreButtonClass 与 MoreButtonStyle 属性,可以单独为更多页(...)分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则上页和下页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增属性 ShowMoreButtons ,可以指定是否显示更多页按钮; 新增属性 CurrentPageButtonPosition ,可设置在每次分页后,当前页数字索引在所有的数字页索引中的显示位置,该属性值是一个PagingButtonPosition枚举,对应的值及说明如下: Beginning:当前页数字索引总是显示在所有数字页索引的最前面; End:当前页数字索引总是显示在所有数字页索引的最后面; Center:当前页数字索引总是显示在所有数字页索引的中间; Fixed:默认值,固定不变; 控件的CssClass属性仅应用于控件的窗口元素(div),将不再应用于下属分页元素; 废止属性CenterCurrentPageButton,可以用CurrentPageButtonPosition属性取代; 修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能; 修正了7.1版中设置SubmitButtonImageUrl属性后,Postback回发分页方式情况下点击数字页索引按钮不引发分页事件的bug; 修正了使用Url分页时,如果页面上没有服务器端form控件时无法注册客户端脚本的bu
说明: 这是本人效仿126邮箱界面在美工的配合下做的一公用界面、基本上适合很多信息管理系统的界面要求。本人的CSS和JAVASCIRPT的功底有限,开发的东西难免会有些BUG或者很肤浅的地方,希望和朋友们一起探讨解决其中的一些问题。也非常希望高手们优化我JS。 功能介绍: 1、可以换皮肤、其中住框架、具体页面可以统一使用皮肤。 2、tab页标题有右键菜单,新开、全屏打开,刷新。双击标题也可以刷新。 3、可以收放菜单栏。 使用方法: 基本上主框架页面不需要作任何的变动了,直接就可以用,就不讲了。 在这里主要讲一下使用tabControl: tabControl新开一个页面实际上是通过JS在主显示区域建立一个iframe 把这个iframe的src 指向我们指定的页面。 本源码由16Aspx调测并整理 商业版资源请在作者或者16Aspx授权范围内使用,否则后果自负! 如需转载免费版请注明作者信息及来源,以示对他人劳动成果的尊重! 获得更有效最新的帮助技术支持看这里:http://www.16aspx.com/ ╭═══════════════╮ ║ .Net源码 控件专业站 ║ ╭══════┤ http://www.16aspx.com ├═════╮ ║ ║论坛:http://www.16aspx.com/forumindex.aspx ║ ║ ╰═══════════════ ╯ ║  ║ ║ ║ ║  ║16Aspx声明: ║ ║ 1) 本站不保证所提供软件或程序的完整性和安全性。 ║ ║ 2) 转载本站提供的资源请勿删除本说明文件。 ║ ║ 3) 本站源码为网上搜集或网友提供,如果涉及或侵害到您的版║ ║ 请立即写信通知我们。 ║ ║ 4) 本站提供代码只可供研究使用,请在下载24小时内删除, ║ ║ 切勿用于商业用途,由此引起一切后果与本站无关。 ║ ║ 5) 源码后续升级或修补,我们会在该源码评论中发布! ║  ║ ║ ║ ║  ║项目承接:Asp.Net网站,Asp.Net管理系统开发,Winform系统开发 ║ ║ Silverlight、WPF开发,各类管理系统工具开发 ║ ║ ║ ║网站广告投放:QQ: 330199865,Email: amomzk@hotmail.com ║ ║ ║ ║ 本站专注于C# .NET技术讨论 ║ ║ 联系方式 : amomzk@hotmail.com ║ ║ ╭───────────────────────╮ ║ ╰══┤ .Net源码专业站 http://www.16aspx.com ├══╯ ╰───────────────────────╯ 友情提示: 一般数据库文件默认在DB_16aspx文件夹下 更多使用帮助和协议请浏览http://www.16aspx.com/ 以上相关内容变更请以16Aspx官方网站最终显示为准

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 84
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值