您的位置:首页 > 其它

创建服务器控件

2007-03-21 14:57 281 查看

1. 定义属性
public的Property将在设计时控件的属性窗口中显示,添加各种类型的Attribute可以影响属性的展现形式和持久化形式。

BrowsableAttribute:指定一个属性或事件是否应显示在“属性”窗口中;

CategoryAttribute:应用到属性或事件,指定属性或事件在属性浏览器中列出时所处的类别;

DescriptionAttribute:应用于属性或事件,指定在属性浏览器中显示的对属性或事件的说明。

DesignOnlyAttribute:应用于属性,指定是否只能在设计时设置属性。

ReadOnlyAttribute:应用于属性,指定在设计时属性是只读还是可读/写。

BindableAttribute:确定属性是否适合数据绑定器进行绑定;

PersistenceModeAttribute:定义指定如何将 ASP.NET 服务器控件属性或事件保持到 ASP.NET 页的元数据属性。InnerProperty:指定属性作为服务器控件的开始和结束标记内部的嵌套标记保持。如下面例中的HeaderStyle;

DesignerSerializationVisibilityAttribute:指定在设计时序列化组件上的属性时所使用的持久性类型。Content:代码生成器产生对象内容的代码,而不是对象本身的代码。Hidden:代码生成器不生成对象的代码。Visible:代码生成器生成对象的代码。如下面例中的TableStyle。

<cc1:exrepeater id="ExRepeater1" runat="server" TableStyle-BorderStyle="Dotted">
<HeaderStyle BackColor="#C0C0FF"></HeaderStyle>
</cc1:exrepeater>

NotifyParentPropertyAttribute:指示当此属性应用到的属性的值被修改时将通知父属性。如果属性的父属性应该在该属性值更改时接到通知,则向该属性应用 NotifyParentPropertyAttribute。

MergablePropertyAttribute:在属性浏览器中当多个组件被浏览和选中时,允许或阻止包含某属性。

DesignTimeVisibleAttribute:是否在设计器上显示该组件。

ToolboxItemAttribute:是否在工具箱中显示该组件,或指定显示的工具箱名称/类型。

2. 呈现服务器控件

重写 Render 以将 HTML(或其他标记内容)作为字符串参数传递到 HtmlTextWriter 的实例的 Write 方法。Control 基类提供 RenderChildren 方法以从其子控件(如果有)呈现内容。

System.Web.UI.WebControls.WebControl 类还提供其他几个方法来便于呈现:AddAttributesToRender 方法添加需要呈现的 HTML 属性和样式;
RenderBeginTag 和 RenderEndTag 方法重写开始和结束 HTML 元素标记;
RenderContents 方法指定标记内的内容。

ISite.DesignMode 属性:确定组件在由类实现时是否处于设计模式。实际使用时用
if ( (this.Page != null) && (this.Page.Site != null) && this.Page.Site.DesignMode ) 判断

3. 定义事件

定义保存事件数据的类,继承System.EventArgs(在控件之外定义);

定义事件委托,继承System.EventHandler(在控件之外定义);

在控件中定义的事件成员。该成员由 event 关键字标识

调用委托的控件中的方法(例如:OnClickOnTextChanged)。

4. 生成和捕获回发事件

控件实现IPostBackEventHandler接口,允许控件在服务器上引发事件来响应来自客户端的回发。

生成:用方法Page的GetPostBackClientHyperlink生成服务器回发事件的超链接。参数为处理回发的服务器控件和传递给服务器控件的参数。
捕获:在控件的IPostBackEventHandler.RaisePostBackEvent方法中处理回发事件。

5. 开发复合控件

INamingContainer:标记接口,为每个子服务器控件创建新 ID 命名空间

使用 CreateChildControls创建子控件

“事件冒泡”的技术,允许子控件将事件沿其包容层次结构向上传播。RaiseBubbleEvent 沿层次结构向上将事件数据发送到控件的父级。若要处理或引发冒泡的事件,控件必须重写 OnBubbleEvent方法。

6. 类型转换

TypeConverterAttribute指定用作此特性所绑定到的对象的转换器的类型。带有该属性的类可以保存在ViewState中。给属性添加Attribute:[TypeConverter(typeof(CustomerConverter))]。用于转换的类必须从 TypeConverter 继承。简单定义可重写以下方法:CanConvertFromCanConvertToConvertFromConvertTo

7. 属性的编辑器

要自动运用集合编辑器。属性的类型必须实现Llist接口,并定义好Add和Delete方法,方法的参数须声明为正确的类型。

自定义设计时 UI 类型编辑器:

使用EditorAttribute指定用来更改属性的编辑器。给属性添加Attribute:[EditorAttribute(typeof(CustomerEditor), typeof(System.Drawing.Design.UITypeEditor))]

定义一个从 System.Drawing.Design.UITypeEditor 派生的类。

重写 EditValue 方法以处理用户界面、用户输入操作以及值的分配。用provider.GetService(typeof(IWindowsFormsEditorService))得到显示 Windows 窗体,或者在设计模式下在属性网格控件的下拉区域中显示控件的IWindowsFormsEditorServiceCloseDropDown关闭所有以前打开的下拉控件区域。DropDownControl在提供此服务的属性网格的值字段下方的下拉区域中显示指定控件。ShowDialog显示指定的Form

重写 GetEditStyle 方法,将编辑器将使用的编辑器样式的类型通知给“属性”窗口。返回值为UITypeEditorEditStyle
DropDown:显示向下箭头按钮,而且该用户界面将在一个下拉对话框中承载。
Modal:显示省略号 (...) 按钮,该按钮用于启动模式对话框或有窗口的对话框。
None:不提供任何交互用户界面 (UI) 组件。

SDK: ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconservercontrolssamples.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: