写组件的高手门给点意见吧

bear123456789 2006-08-29 04:07:43
看了些贴子发现大家都在考虑如何使用第三方控件。我想学习如何写控件。现在有很多不明白的地方。希望大家给我指条路。介绍书。参考材料。或者是站点论坛都可以。
...全文
369 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinlang123chao 2006-09-02
  • 打赏
  • 举报
回复

学习
shangfc 2006-09-01
  • 打赏
  • 举报
回复
dotnet 2.0中自定义控件学习笔记

1. 自定义设记器的方法
a. 引用System.Design库
b. 自定义一个新控件名为MyControl
c. 定义一个新类名为MyControlDesigner,并使它从ControlDesigner继承
d. 在类MyControl中添加类属性(Attribute)Designer(gettype(MyControlDesigner)), 这样新控件将使用MyControlDesigner作为它的设计器
e. 注:为使用方便,请在类文件首添加"Imports System.ComponentModel" 和"Iimports System.ComponentModel.Designer"
2. IDesignerFilter接口的使用
a. IDesignerFilter 使设计器能够筛选其关联组件通过 TypeDescriptor 公开的属性 (Property)、属性 (Attribute) 和事件描述符的集合。对于此接口的方法,在调用名称以 Pre 开头的方法之后,立即调用名称以 Post 开头的方法。如果要添加属性 (Attribute)、事件或属性 (Property) 说明符,请使用 PreFilterAttributes、PreFilterEvents 或 PreFilterProperties 方法。如果要更改或移除属性 (Attribute)、事件或属性 (Property) 说明符,请使用 PostFilterAttributes、PostFilterEvents 或 PostFilterProperties 方法。
b. ControlDesinger已经实现了IdesignerFilter接口,通过重写(Overrides)同名的方法可以进行自定义。要隐藏属性,请重写Sub PostFilterProperties(ByVal properties As System.Collections.IDictionary)方法,并在properties中删除指定的属性,要添加自定义的属性,可以使用TypeDescriptor.CreateProperty方法创建一个”property”描述对象,并将其添加到properies字典中
3. 扩展程序提供程序的实现.
a. “扩展程序提供程序”是一种为其他组件提供属性的组件,例如Tootip组件为所有在同一窗体中的控件提供一个名为ToolTip的属性,以扩展它们。要实现此功能,设计器必须实现IExtenderProvider接口
b. IextenderProvider接口的定义
Function CanExtend(byval target as object) as boolean,控件实现此方法时通过判断target的类型是否为可扩展的类型来返回true/false.注意:此接口由控件实现而不是由设计器实现
c. 在控件中添加一对公用方法分别为
Public Sub SetPropertyName(byval value as type)
Public Fuction GetPropertyName() as Type
其中PropertyName为要为其它控件扩展的属性名,例如Tooltip中的SetToolTip方法。
为控件添加属性(Arrtibute) ProvideProperty,以标记为其它控件提供的属性名字.
4. 在控件中使用集合编辑器
a. 创建一个类MyItem,此类的对象将放在集合中。
b. 创建一个自定义集合MyCollection,并使它从CollectionBase类继承。
c. 为MyCollection添加一个属性,声明如下
Public Property Item(ByVal index As Integer) As MyItem
d. 为MyCollection添加一个方法,声明如下
Public Function Add(ByVal line As MyItem) As Integer
e. 为控件添加一个属性MyCollectionProperty,并为它附加元属性(Attribute)
< DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>,使设计器能够正确的序列化添加此集合属性。
f. 重新生成工程,并在某个窗体上测试.
5. 在自定义控件时使用元数据属性(Attribute)
元属性 应用于 说明 备注
Browsable 属性/事件 表示属性或事件是否在设计时可见
Description 属性 在属性窗口底部显示的说明性文字


6. 为自定义控件添加智能标记
a. 什么时智能标记?
详细请见MSDN2005中的:
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxdeveloping/html/0bad6816-922a-4845-b8e3-50e91ec60f13.htm
添加一个自定义控件类MyControl,并使它从Control(Usercontrol)继承
b. 创建一个类名为MyControlActionList,并使它从DesignerActionList继承.
i. 在类中添加属性或方法,这此属性或方法将作为智能标记项显示在智能标记面中
ii. 重写GetActionList方法,在此方法中创建一个DesignerActionItemCollection类的对象,在对象中添加DesignerActionItem的子类对象。有以下几种子类对象,
1. DesignerActionHeadTextitem,用于包装标题
2. DesingerActionPropertyItem,用于包装属性
3. DesignerActionMethodItem,用于包装方法
返回DesignerActionItemCollection对象
c. 添加一个自定义设计器类MyControlDesigner,并使它从ControlDesigner继承
d. 重写设计器的ActionLists属性,在属性中新建一个DesignerActionListCollection对象list,并在对象中添加一个MyControlActionList对象,返回list对象
e. 为MyControl添加一个属性(Attribute),<Designer(gettype(MyControlDesigner),Gettype(Idesigner))> _
f. Finish
7. 设计时添加组件。
要在设计时创建组件,可以用如下方法
a. 创建一个设计器。
b. 重写设计器的Initialize方法,在此方法中获取设计时服务IdesignerHost.调用host的CreateComponent方法,此方法将创建一个指定类型的组件,并将它添加到设计时环境。
c. 为组件附加一个属性(attribute),<Designer(gettype(xxx),gettype(xxx))>_
d. 使用IdesignerHost.Destroy方法可以释放一个组件
e. finish
8. 为其它组件添加智能标记。
在设计环境中,要为其它组件添加智能标记方法如下:
a. 创建智能标记面板,方法如为自定义控件添加智能标记所示
b. 为组件创建一个设计器,在设计器中获取设计时服务,DesignerActionService.
c. 调用服务的Add方法为适当的组件添加智能标记面板。
注意:在组件被销毁时,请将附加的智能标记面板从其他组件中去除。
lowtemper 2006-08-30
  • 打赏
  • 举报
回复
晕,买点书看看吧,现学会写属性,方法,再学designer
bear123456789 2006-08-30
  • 打赏
  • 举报
回复
这个意见简洁
  • 打赏
  • 举报
回复
用Reflector看看TextBox的源代码。
  • 打赏
  • 举报
回复
自己写个TextBox,然后再写个GridView。

8,832

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧