Dotnet专业组件开发揭密(一)

Dotnet专业组件开发揭密(四) Dotnet专业组件开发揭密(四)--TypeDescriptor内部机制及其应用(下) 前两篇文章里我们TypeDescriptor是用来返回一个类的属性或事件描述符的,VS中使用的PropertyGrid就是通过它来取得一个类的属性的。而不是我们以为的是通过反射来做的。那么它的内部机制是如何的?TypeDescriptor它会进行几个判别,一是查看类是否实现了ICustomTy 阅读详情

Dotnet专业组件开发揭密(一)

 

--扩展功能提供程序

本文代码下载

官方地址://Code/Csharp/BlogCode/ExtenderProvider.rar

优快云地址:http://download.youkuaiyun.com/source/231264

 

很多人会以为写组件是件容易的事,也许某些方面是这样的,比如你可以很简单地实现一个自定义的功能。但是写出来的组件好象跟专业厂家开发的组件程序是不是有些差距呢?那么如何写一个专业组件呢,写专业组件要掌握哪些知识呢,它们的内部机理是什么呢?如果你对此感兴趣的话,那么这个系列实在是很值得你来看一看的。

本篇是要介绍如何扩展一个已有的组件功能。比如用户提出来要在TextBox控件上实现一个取得焦点后实现背景色变成蓝色,前景色变成黄色的功能。如果按我们一般的想法,很简单,我只要写一个从TextBox继承下来的AutoColorTextBox类,然后重载OnGotFocus就好了。的确,这是一种好方法,在很多场景里。好,下面我们的客户又提出一个要求Combox也要是这样子,因为他们的录入人员眼睛不是很好,于是你又写了一个AutoColorCombox。这时候你的心情很好,正打算去晚饭犒赏一下自已辛苦的一天,不过你的ProjectManager打电话给你,说用户提出来ListBox也要改一改,还有原来的TextBox要加上只充许录入数字的功能。现在你想说什么,我猜是Fuck you!当你看着这么多乱七糟的扩展类是不是很头痛呢?嗯,MS也考虑到这个问题了,他们提出了一种新的方法或许可以减轻你的痛苦。

我们先来看一个我们常用到的组件,但也许并没有引起你的注意,它就是ToolTip,我们先来看它的效果,左边的图是没有在窗体上放ToolTip时,TextBox所显示的属性,右边就是放了之后的属性,很容易我们知道右边的图多了一个toolTip1上ToolTip属性,不过你想过其中的机制是什么?为什么可以动态地影响一个控件的属性呢?

如果学过设计模式,我们很容易想到Decorate(装饰模式)。实际上CLR就提供了一些辅助类可以让你实现这个目的。 那么如何来创立象这样的功能呢?

A)创建一个实现IextenderProvider的类,它实际上只需要有一个CanExtend的函数,你判断是否可以扩展的类型就好了。

B)用ProviderPropertyAttribute修饰该类,它需要两个东东,一个是增加的属性名称,另一个是修饰的对象类型,比如我们要给TextBox增加一个取得焦点时的背景颜色功能,其属性为AutoBackColor。那么这个特性修饰符应该是[ProviderProperty(“AutoBackColor”,typeof(TextBox))]

C)创建两个方法,以GetXXX和SetXXX来命名,里面就是你的处理过程,其中XXX是你的扩展属性名,比如这个类就应该是GetAutoBackColor。这两个方法有两个功能,一方面是取得对应的属性值,另一方面是注册事件,我的例子中是注册的是MouseEnter和MouseLeave两个事件,这样当鼠标移到控件上时,背景色就会改变。因为每个控件可以设置不同的背景色,因此,你需要在类里包括一个哈希表,这样以保存每个控件不同的用户背景色。

D)如果你想要在工具箱上显示你的这个扩展功能控件,你还需要使这个类从Component继承,如果你从Control继承,会有一点问题,因为VS会认为是一个可显示的控件,当你拖到窗体上时,它不会显示在下面额外的一栏里。

E)还有一点小问题,如何将属性归类到“外观”这个归类里。也很简单,你只要在GetXXX里加上[Category(“Appearance”)]这一句就好了。

最后我们来看一下我写的代码的效果图

好了,也许你要问,这一切是如何实现的,背后的原理是什么,请等下一篇,我将告诉你MS是如何处理这一切的。

 

 

参考资 料:MSDN上的文章《Custom Provider Controls》(http://msdn.microsoft.com/msdnmag/issues/03/11/CuttingEdge/),虽然是英文的,不过蛮好懂,也就懒得翻了。

 

 

 
Dotnet专业组件开发揭密(三) Dotnet专业组件开发揭密(三)--TypeDescriptor内部机制及其应用(中) 本文代码下载官方地地://Code/Csharp/BlogCode/TypeDescriptionProviderDemo.rar优快云地址:http://download.youkuaiyun.com/user/BlueDog     上一篇我们讲到了如何利用ICustomTypeDesc 阅读详情

相关推荐

C#进行平台调用时利用C++头文件的小技巧

C#进行平台调用时利用C++头文件的小技巧 我正好在做一个控件,其中需要引用WinXP自带的UxTheme.dll,因为我想生成一个纯粹的C#程序,而不是利用Manage C++来成一个托管类的动态库来作为C#程序的基础,因此想到需要转换定义。UxTheme.dll共有47个命名函数,找到VC7(我使用VS2003)中的对应头文件UxTheme.h,在UltraEdit32这个工具中很

BlueDog专栏 9118

Dotnet专业组件开发揭密

很多人会以为写组件是件容易的事,也许某些方面是这样的,比如你可以很简单地实现一个自定义的功能。但是写出来的组件好象跟专业厂家开发的组件程序是不是有些差距呢?那么如何写一个专业组件呢,写专业组件要掌握哪些知识呢,它们的内部机理是什么呢?如果你对此感兴趣的话,那么这个系列实在是很值得你来看一看的。本篇是要介绍如何扩展一个已有的组件功能。比如用户提出来要在TextBox控件上实现一个取得焦点后实

EricChina的专栏 1260

3D识别建模 — 基于ReconstructMe和EAGLE EYES SCANNER的实现

3D实体识别建模,作为3D打印反向工程的一个重要环节,今天就让我们利用ReconstructMe和EAGLE EYES SCANNER来了解一下。 第一步、软件和硬件准备就绪 ReconstructMe下载并安装 http://reconstructme.net/?wpdmdl=160 EAGLE EYES SCANNER直接将相应USB插入电脑接口即OK,之后在    中点击搜索“设备管理...

qq_40013290的博客 881

DevExpress - 使用 GaugeControl 标尺组件制作抽奖程序 附源码

    前不久,公司举办了15周年庆,其中添加了一个抽奖环节,要从在读学员中随机抽取幸运学员,当然,这个任务就分到了我这里。   最后的效果如下,启动有个欢迎页面,数据是来自Excel的,点击开始则上面的学号及姓名等信息开始随机滚动,显示区域自适应长度变化等。   点击停止则停止滚动,将抽取的学员信息用Graphics绘制到当前窗体结果区域中:      用到的知识点: 1. D...

weixin_34292402的博客 451

腾讯会议视频过期了怎么办?亲测可用:用这个免费插件抢救你的会议录制与回放

本文提供了三种亲测有效的腾讯会议视频过期恢复方案,包括浏览器缓存提取、专业工具组合及预防性措施。特别推荐使用免费插件抢救过期会议录制与回放,帮助职场人解决重要视频资料丢失的难题。

weixin_33686714的博客 265

华为ENSP完整安装教程

华为ENSP完整安装教程

Hnm456756的博客 7340

Dotnet专业组件开发揭密(二)

Dotnet专业组件开发揭密(二)--TypeDescriptor内部机制及其应用(上) 本文代码下载官方地址://Code/Csharp/BlogCode/TypeDescriptorDemo.rar优快云地址:http://download.youkuaiyun.com/user/BlueDog 本篇要讲述的是System.ComponentModel空间里最神奇的类,也是最

BlueDog专栏 2821

Dzzoffice结合OnlyOffice 报错排查流程总结

首先访问 OnlyOffice 首页,如下图:出现上图仍旧不能说明你的 OnlyOffice 服务已经成功安装,我们需要启动 OnlyOffice 服务测试用例来检测,可以看到上图出现了两条命令,第一条命令是用来启动测试用例服务的,我们只需要在后台执行该命令即可,Windows环境是以管理员身份运行Windows PowerShell输入即可运行了。

小胡的博客 4599

Dotnet专业组件开发揭密2

<br /><br />本篇要讲述的是System.ComponentModel空间里最神奇的类,也是最重要的类,几乎所有的高级控件设计人员都必需掌握的类—TypeDescriptor。它的作用类似于反射,但是它是可以动态更改类信息的!虽然我们可能很少碰到直接使用它的情况,但是它的原理必须理解,这样你才不会对VS中一些机制产生疑问。<br />我们知道元数据可以说是Dotnet的基础,一旦编译后,就不能更改,而我们经常使用System.Reflection命名空间里的一些类来查看这些元数据,但是我们并没有办

溪风的专栏 700

STM32F103C8T6通过ESP8266连接阿里云物联网平台(附代码)

STM32F103C8T6连接阿里云物联网平台(1)—阿里云lot Studio控制 Web开发 分享一下自己使用stm32f103c8t6通过ESP_01模块连接阿里云物联网平台,实现温湿度上传和控制命令下达的过程,能力有限,用的是最简单的方法,如有错误,多多担待。 一、硬件选型 1、 stm32f103c8t6 2、ESP_01 wifi模块 3、其他 二、硬件连接 WSP_01 STM32F103C8T6 RXD PA2 TXD PA3 RES PA4 VCC 3.3

weixin_A13253323604 3万+

fins协议握手信号服务器响应,欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等...

前言 – Fins欧姆龙这个协议网上极少有相关的模拟器、Tcp的这一块倒是有但是Udp的基本都是不可用1、 Fins协议结构也很简单 协议分为两种 一种tcp一种udp2、 Tcp比Udp的报文会多一层tcp的head头部3、 Udp回应报文在Wireshark中是解析不到(因为他按照UDP的格式去解那指定是解不到)好长时间没有更新过博客了、也比较懒= = 。一、Read(TCP)发包那么这个就很...

weixin_32491317的博客 4441

Dotnet专业组件开发揭密(二)(转载)

转自http://www.cnblogs.com/mywebname/archive/2007/11/15/959732.html 本篇要讲述的是System.ComponentModel空间里最神奇的类,也是最重要的类,几乎所有的高级控件设计人员都必需掌握的类—TypeDescriptor。它的作用类似于反射,但是它是可以动态更改类信息的!虽然我们可能很少碰到直接使用它的情况,但是它的原理必须...

weixin_34174422的博客 126

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

ICustomTypeDescriptor接口

ICustomTypeDescriptor接口 Dotnet专业组件开发揭密 转载于:https://www.cnblogs.com/lky001/archive/2009/03/25/1421492.html

weixin_33916256的博客 560

手把手教你学Simulink--逆变器场景:基于Simulink的单相全桥逆变器PWM控制仿真建模

本文介绍了使用Simulink和Simscape Electrical库进行单相全桥逆变器PWM控制仿真建模的详细步骤。主要内容包括:从创建Simulink项目、添加电力电子组件、构建逆变器模型,到设置参数、运行仿真和结果分析。重点讲解了逆变器核心模块的配置、PWM信号生成、负载建模等关键环节,并提供了优化改进建议。该指南适用于电力电子初学者,通过仿真可以帮助理解单相全桥逆变器的工作原理和PWM控制技术,为实际应用和算法开发提供基础平台。

MHD0815的博客 666

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C#揭密II(大师们在说些什么?)

C#揭密II(大师们在说些什么?)先声明这篇文章属于收藏性质的,推荐给那些喜欢dotNET技术的爱好者。这之前我曾转载了OReilly的一篇关于C#的访谈录。OReilly一向以技术和评论公见长,他们的编辑一般都有着很深的技术背景和功力(所以出的书也比较贵haha),所以那篇着重整个流行技术,有不少是和Java相关的;而这一篇都是MS内部的几个高手在交谈聊天,涉及的范围比上次的专访要广,里

ccBoy的专栏 1825

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

解决用Visual Web Developer 2005编译asp.net 2.0项目时无dll文件的问题

   解决用Visual Web Developer 2005编译asp.net 2.0项目时无dll文件的问题     前段时间下载了Visual Web Developer 2005 Bate 2,想学习ASP.net 2.0。开发了一个网站,编译时发现这个东西跟VS2003不太一样,编译后项目中没有dll文件。昨天无意中发现了一本叫《Asp.net 2.0 大揭密》的书,翻了一下,发现里面有

Anpuso的专栏 2183

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

国产自主研发编程语言火了,同行十二年,不知Python是木兰?

1月17号有媒体称,一款面向智能物联网和编程教育的号称自主研发语言横空出世,名为【Mulan 】。消息一出,引起了众多争议。但有知乎网友发现,下载的程序包解包后——是个 Python?何...

dotNET跨平台 941

dotnet core 2.0 安装

dotnet core 1.1 安装 echo "deb [arch=amd64] https://packages.microsoft.com/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list sudo apt-key adv --keyserver hkp://keyserver.ubun

adc_god的博客 3273

Visual Studio 2008 十大新功能

不仅只是编辑器——写在Visual Studio 2008发布之前      VS2005还没有最终稳定的版本,但是我想在微软的某个办公室,一个项目组正在研究发展Visual Studio 2008这个版本。我看了一下表,现在的时间是公元2006-3-9日,离微软发布VS2008版的α版还有整整18个月,我不知道它最终会是如何的,但是它一定具有以下十项激动人心的特点: No.1

BlueDog专栏 1万+
上一篇: 结构化存储C#类库
下一篇: Dotnet专业组件开发揭密(二)
BlueDog
博客等级 码龄27年 104粉丝 62原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值