[转自]:http://hi.baidu.com/sjbh/blog/item/36d28bc2cfc398110ff4774a.html
我们说一下如何使自己的控件可以在.net studio中的设计器中使用。
1 如果在设计器中希望自己的控件改变大小之后能够被重画,需要在控件类的构造函数中使用下面的代码:SetStyle(ControlStyles.ResizeRedraw, true); 另外,如果想使控件的背景色为透明色,也需要类似的代码,例如:SetStyle(ControlStyles.ResizeRedraw | ControlStyles.SupportTransparentBackColor, true);
2 关于控件类的元数据。为了使设计器能正确地操作我们的控件,必须提供足够的关于元数据(即描述控件自身的数据)。几个常用的元数据包括
一 关于空间的元数据。常用的是控件默认的事件,默认的属性,控件显示在工具箱上的图标。所谓默认事件,是指当在设计器中双击空间时,要给哪个事件添加事件处理函数。所谓默认属性,是指当我们在设计器中编辑控件的属性时,哪个属性默认被激活。可以在控件类的定义前添加下面的代码指定默认事件和默认属性:
[DefaultProperty("属性名"),DefaultEvent("事件名"),ToolboxBitmap("路径")]
另外,ToolboxBitmap元数据也可以是Type的实例,这样,显示在工具箱中的图标就是对应控件的图标。例如:
[ToolboxBitmap(typeof(Button))]
二 关于某个事件的元数据。主要是事件的描述信息,即在事件设计器中,当选中对应的事件时,显示在设计器下面的描述本事件的信息。可以在事件的定义前添加下面的代码指定默认事件和默认属性:
[Description("你自己的描述")]
三 关于某个属性的元数据。主要包括Category,Description,DefaultValue,Browserable和Editor,其中Category是指本属性显示在设计器中的哪个分类里,Description指当在设计器中选定本属性时,显示在设计器下面的描述本属性的信息。DefaultValue就不用说了吧。至于Browserable,这个元数据太重要了,它指定对应的属性在设计器里是否可见。若设为false,在设计器里就看不到此属性了,因此最好显式把它设成true(默认好像是false )。Editor也是一个很重要的属性,它指定当要给此属性选定值时,应该采用什么编辑器。对于一般类型的属性(例如int,string等),设计器都能给出正确的默认的编辑器,但是如果设计器无法识别属性的类型,那么你就必须指定编辑器(你自己写的类,这些类继承自System.Drawing.Desing名字空间中的几个类,幸运的是,这个名字空间中提供了几个可以直接使用的编辑器,使得对于像图像、字体这样的属性不用自己写编辑器了 )。可以在属性的定义前添加代码指定这些元数据。
下面是一个例子。
[Category("Flash"),
Editor(typeof(FlashTrackBarValueEditor), typeof(UITypeEditor)),
DefaultValue(0)]
关于属性还有一点需要注意,如果这个属性和控件的外观有关,那么要在属性的set段里引发重画事件,这样才能使控件得到正确的显示