PropertyGrid无意的发现DisplayNameAttribute及应用

     说到这个winform属性控件PropertyGrid,要从以前参与项目架构研发,做报表引擎开始,当时我们的目的是想做一个比较简单的报表引擎没有RDLC等报表复杂,是为了让我们的可以操作,用户可以凭借表单拖拽设置样式完成报表模板设置,与我们开发人员代码实现的数据流结合,产生基于apose.cells的excel报表。把我们多而烦的报表业务交给用户完成,用户利用报表设计完成的模板保存为xml保存至服务器,工以后使用。当时做到表单控件属性设计无疑我们采用了PropertyGrid控件,PropertyGrid支持很多的控件设计时交互,很强大,但是对于控件的属性汉化却存在问题,当时也没仔细查阅msdn,直接让控件属性为中文字段设计完成,对用户提示。最后项目基本完成,能够应对简单报表,稍微减少了些开发工作量吧。

     在时隔今天做基本控件的封装的时候突然看见了System.ComponentModel.DisplayNameAttribute这个标签,见名就考虑是做什么的,查询msdn才知道他就可以完成对PropertyGrid的现实名称修改(http://msdn.microsoft.com/zh-cn/library/system.componentmodel.displaynameattribute(v=VS.80).aspx?TPSecNotice)。于是便尝试了一下。

代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace WindowsFormsApplication1 

    class TestControl : System.Windows.Forms.TextBox, Green.SmartUIControls.ISmartUIControl 
    { 
        [System.ComponentModel.Browsable(true)] 
        [System.ComponentModel.DefaultValue(null)] 
        [System.ComponentModel.Description("数据绑定匹配属性")] 
        [System.ComponentModel.Category("Green.SmartUIControl")] 
        [System.ComponentModel.DisplayName(ControlResource.Data)] 
        public string Data 
        { get; set; } 

        #region ISmartUIControl 成员 
        private Green.SmartUIControls.IDataBindSetting _DataBindSetting; 
        [System.ComponentModel.Browsable(false)] 
        public Green.SmartUIControls.IDataBindSetting DataBindSetting 
        { 
            get 
            { 
                if (_DataBindSetting == null && !this.DesignMode) 
                { 
                    _DataBindSetting = new Green.SmartUIControls.DefaultDataBindSetting(this); 
                } 
                return _DataBindSetting; 
            } 
            set 
            { 
                if (value != null) 
                { 
                    _DataBindSetting = value; 
                } 
            } 
        } 
        [System.ComponentModel.Browsable(true)] 
        [System.ComponentModel.DefaultValue(null)] 
        [System.ComponentModel.Description("数据绑定匹配属性")] 
        [System.ComponentModel.Category("Green.SmartUIControl")] 
        [System.ComponentModel.DisplayName(ControlResource.DataBindProperty)] 
        public string DataBindProperty 
        { 
            get; 
            set; 
        } 

        [System.ComponentModel.Browsable(true)] 
        [System.ComponentModel.DefaultValue(null)] 
        [System.ComponentModel.Description("Dock")] 
        [System.ComponentModel.Category("Green.SmartUIControl")] 
        [System.ComponentModel.DisplayName(ControlResource.Dock)] 
        public override System.Windows.Forms.DockStyle Dock 
        { 
            get 
            { 
                return base.Dock; 
            } 
            set 
            { 
                base.Dock = value; 
            } 
        } 
        #endregion 
    } 

    public class ControlResource 
    { 
#if Debug 
        public const string Dock = "Dock"; 
        public const string DataBindProperty = "DataBindProperty"; 
        public const string Data = "Data"; 
#else 

        public const string Dock = "停靠"; 
        public const string DataBindProperty = "数据绑定匹配属性"; 
        public const string Data = "数据"; 
#endif 
    } 
}

    最后需要特别说明的是对于Attribute我们只能传入常量。在我们的很多开发员使用控件等时候我们也许都习惯了英文对于中文不适应了,但是我们可以利用vs的条件编译绕过,编译出不同的dll包,开发版和用户使用版本。如上面的对于调试和发布版的显示设置。这个ControlResource我们可以开发一个简单的工具对其xml保存并生成我们需要的代码维护。

看图:

设置Dock=Top:

设置Dock=Bottom:

    同时我也考虑到在我们的工作流自定义表单设计和代码生成工具等中我们也可以运用,表单设计的控件字段属性设置,保存为xml或者二级制,xaml存储之类。简单说一句对于silverlight,wpf 的对于我觉得保存为xaml是最简单的,我们可以直接保存xaml,并简单转换加入父容器中。

作者:破  狼 
出处:http://www.cnblogs.com/whitewolf/ 
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客博客园--破狼51CTO--破狼。http://www.cnblogs.com/whitewolf/archive/2012/02/11/2347096.html

时间: 2024-09-19 09:00:33

PropertyGrid无意的发现DisplayNameAttribute及应用的相关文章

无意中发现的一款免费e-Learning平台系统ZLMS,不敢独享!

问题描述 ZLMS是我在无意中发现的一款免费e-Learning学习培训管理系统.与国内众多的收费厂商的远程教育学习,教学管理系统,e-Learning平台系统对比,这些系统大都复杂难用,而且价格不菲,实施成本太高.但ZLMS走的却是完全免费路线,非常难得,该有的功能都有,简单易用,上手很快,这是我的使用感受!ZLMS功能非常的强大,支持实时的视频课堂,支持标准SCORM课件,支持多种在线交流协作工具(如论坛.课程公告.课程短消息.内部邮件.课程资源发布,课程文档共享及在线制作等等),支持在线考

今天无意中发现阿里妈妈推出了按效果计费的广告

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今天无意中发现阿里妈妈推出了按效果计费的广告,不知道效果怎么样

论坛网友无意中发现的贫困女孩晏章娟

在百度输入"巫溪"二字,第一个映入眼帘的门户网便是"巫溪论坛",目前,这个网站是巫溪县最大的民间网站."阳光女孩"晏章娟."自立妹妹"龚魁俊等贫困好学的孩子,都是通过该网站得到媒体广泛关注和市民救助从而得以回到心爱的课堂. 让人意外的是,这个网站是一名电脑发烧友利用业余时间创办起来的.在增加"公益"功能后的短短2年多时间里,该网站已帮助100多名贫困孩子重返课堂. 阳台上办起巫溪首个民间网站 2004年,当

今天无意这个发现的,猜猜csdn是什么、?

刚刚说上CSDN看看文章     丫丫丫丫   直接打CSDN   输入法直接提示:床上等你吓我一跳哦.哈哈   有图有真相       此文仅供娱乐.大家放松放松.   --------------------------------------------------------------杂乱的心情--------------------------------------  

无意中的发现 网上code很多人都没考虑到的 彻底禁锢Ctrl+Alt+Del

问题描述 按下Ctrl+Alt+Delete后不让弹出这个Windows安全对话框C#WinForm中,要求:按下Ctrl+Alt+Del不再弹出"Windows安全"对话框因为我已经在程序中将Ctrl+Alt+Delete这个组合键屏蔽掉了原来是没什么问题的任务管理器是不会出来的可现在我在"控制面板"->"用户帐户"->"更改用户登录或注销的方式"里面选择了传统的登录模式后再执行我的程序发现按下Ctrl+Alt+

玩家发现魔兽神秘页面

每年暑期,都是众多游戏推出丰富多彩活动的时候.以往<魔兽世界>这样的高大上游戏鲜有暑期活动上线,但看来今年将会有例外.今日早上,有细心玩家无意中发现了<魔兽世界>国服官网的一个未完成的神秘页面,疑似为今年<魔兽世界>将推出的暑期活动--buff一夏"做你未做完的事".但该页面随后即无法显示,猜测是官方仍在对页面进行最后的调整和测试. 小编第一时间尝试联系<魔兽世界>国服运营团队,虽然并未得到任何官方回复,但从页面和标题,我们不难获知以下信

安全研究员发现Instagram漏洞,遭FaceBook高管威胁

一位独立安全研究人员声称,他曾发现了Instagram中一系列安全漏洞和配置缺陷,通过利用这些漏洞,他成功地获取了访问存储在Instagram服务器上敏感数据的权限;在他向相关厂商报告了这些漏洞后,却受到了Facebook的威胁. 是否想过如何破解Instagram?或者如何黑掉一个facebook账户?Well,现在就已经有人就做到了!但是,需要记住的是,甚至负责地报告一个安全漏洞都可能会导致它们对你采取法律措施. 漏洞分析 一位独立安全研究人员声称,他曾发现了Instagram中一系列安全漏

如何设置常用组策略

  故障现象: 组策略应用设置大全 一.桌面项目设置 1. 隐藏不必要的桌面图标 2. 禁止对桌面的改动 3. 启用或禁止活动桌面 4. 给"开始"菜单减肥 5. 保护好"任务栏"和"开始"菜单的设置 二.隐藏或禁止控制面板项目 1. 禁止访问"控制面板" 2. 隐藏或禁止"添加/删除程序"项 3. 隐藏或禁止"显示"项 三.系统项目设置 1. 登录时不显示欢迎屏幕界面 2. 禁用注册表

Word常用技巧:让字号足够大

在写欢迎标语.做课件时常常需要用到特大号的字,但Word.http://www.aliyun.com/zixun/aggregation/16544.html">Excel.PowerPoint等应用软件中,默认字号是有限的(如Word.Excel最大字号为72号,PowerPoint为96号).怎么办?以前的办法是:在Word中 插入艺术字,再通过 缩放艺术字来实现.但因艺术字字体的 局限性,总感觉有些不爽. 最近,在进行文本处理时,无意中发现只要选中某字,然后按"Ctrl+]