只有研究它的源代码才能获得真正的收获。一步一步慢慢来,这个年假里,我就跟它耗着了。哈哈哈。
之所以从DevExpress.XtraEditors这个命名空间开始,是因为,我们常用的控件都在这,从这儿切入对于平常写代码,写个控件什么的,帮助是最大的。也是最能得到提高的。
从TextEdit.cs这个文件开始。
用dotnet开发控件(一)#region Copyright (c) 2000-2007 Developer Express Inc.
/*
{*******************************************************************}
{………………………………………………………………}
{*******************************************************************}
*/
#endregion Copyright (c) 2000-2007 Developer Express Inc.
这个地方就学到了东西。我原来用#region时,只是在#region后面写上一个描述性字符串,原来#endregion后面也是可以加字符串的,这样也是蛮有好处的,如果存在多层嵌套的#region+#endregion的话,那么,维护人员看起代码就会比较轻松。
版权声明之后就是一大路的using了。我喜欢using,比#include的让人郁服多了。哈哈。里面引用许多DevExpress自身的命名空间。另外有一个要说一下:
using System.Runtime.InteropServices;
这个命名空间的作用是用于对托管与非托管代码之间进行“封送”,我们最常用的就是DllImport这个Attribute了。我们通过它来声明本机Win32 API。这个命名空间大部分都是一些Attribute。没什么好说的。
接下来的代码就是各个类的源代码了。我发现其中有好多的Attribute。因为对于Attribute实在没什么了解,只好去看我参考书。这个东西就是第一关了。
何谓Attribute,如何使用,有什么用?这是我需要了解的。
Attribute:用于标记代码元素的一种信息,是继承自System.Attribute的类。它被编译器、CLR、vs IDE等信息传递的目标通过反射实例化。
用dotnet开发控件(一)在自定义控件时常用的Attribute有:
BrowsableAttribute:描述是否一个属性或事件应该被显示在属性浏览器里。
CategoryAttribute:描述一个属性或事件的类别,当使用类别的时候,属性浏览器按类别将属性分组。
DescriptionAttribute:当用户在属性浏览器里选择属性的时候,description里指定的文本会显示在属性浏览器的下边,向用户显示属性的功能。
BindableAttribute:描述是否一个属性倾向于被绑定。
DefaultPropertyAttribute:为组件指定一个默认的属性,当用户在Form设计器上选择一个控件的时候,默认属性会在属性浏览器里被选中。
DefaultValueAttribute:为一个简单类型的属性设置一个默认值。
EditorAttribute:为属性指定一个特殊的编辑器。
LocalizableAttribute:指示一个属性是否能被本地化,任何有这个Attribute的属性将会被持久化到资源文件里。
DesignerSerializationVisibilityAttribute:指示一个属性是否或者如何持久化到代码里。
TypeConverterAttribute:为属性指定一个类型转换器,类型转换器能将属性的值转化成其它的数据类型。
DefaultEventAttribute:为组件指定一个默认的事件,当用户在form设计其中选择一个控件的时候,在属性浏览器中这个事件被选中。
上面的这些常用Attribute节选自:点此处进入,这位作者有一系列关于在dotnet下自定义控件的好文,先研究一下,磨刀不误砍柴工嘛。以前在网上找的时候总是那个老掉牙的doc。总算找到前辈的经验成果了。其随笔访问链接,点此进入。
本人后来查了MSDN,上面关于Attribute的内容事实上来自于MSDN,其链接如下:
用dotnet开发控件(一)ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxmclicc/html/12050fe3-9327-4509-9e21-4ee2494b95c3.htm