1 / 47
文档名称:

在net中开发复合控件.docx

格式:docx   大小:31KB   页数:47页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

在net中开发复合控件.docx

上传人:sanshenglu2 2020/12/16 文件大小:31 KB

下载得到文件列表

在net中开发复合控件.docx

相关文档

文档介绍

文档介绍:
标签:   .net  开发  复合控件  分类: 技术杂文 2006-09-20 09:46
1)开发复合控件
每个控件都具有从 继承的 Controls 属性。这是表示控件的子控件(如果有)的集合属性。如果控件未用 ParseChildrenAttribute 标记,或是标记为 ParseChildrenAttribute(ChildrenAsProperties = false),则当控件在页上以声明方式使用时, 页框架将应用以下分析逻辑:
 如果分析器在控件的标记内遇到嵌套控件,它将创建嵌套控件的实例并将它们添加到控件的 Controls 属性。标记之间的文本添加为 LiteralControl。任何其他嵌套元素都生成分析器错误。
   如果自定义控件是从 WebControl 派生的,它将不具有示例中描述的分析逻辑,因为 WebControl 是用 ParseChildrenAttribute(ChildrenAsProperties = true) 标记的,用它可以指示当在页上以声明方式使用控件时,嵌套在服务器控件标记内的 XML 元素是应视为属性还是应视为子控件。无法继承此类。
 以常见的DropDownList为例,下面是DropDownList控件基本使用模式:
<asp:DropDownList id=”drop” ruant=”server”>
<asp:ListItem>item1<asp:ListItem>
… …
<asp:ListItem>itemn<asp:ListItem>
</asp:DropDownList>
 我们说过web服务器控件都是从WebControl类派生,, 属性设置为true,告诉框架在建立DropDownList时,ListItem应该看成是子控件而不是DropDownList的属性。这样框架就会建立子控件
ListItem对象。
一个控件到底是属性还是子控件有什么区别吗?其实属性和自控件主要区别是包容容器的不同。当一个字段被当作属性时,这个属性其实是该类的一个成员,例如DropDownList的ID,它是DropDownList的属性,因此DropDownList的定义应该类似如下:
class DropDownList:WebControl
{int ID;
… …}
而ListItem是子控件使得ListItem和DropDownList是逻辑上分离的,也就是说ListItem提供一种接口,这样复合这种接口的控件,都可以作为它的父控件(或者说容器),
正式因为这个原因,所以对于ListBox控件可能有如下使用方式
<asp:ListBox id=”list” ruant=”server”>
<asp:ListItem>item1<asp:ListItem>
… …
<asp:ListItem>itemn<asp:ListItem>
</asp:ListBox>
 读者可以看到,作为子控件的ListItem很容易“融合”在ListBox里,把ListBox当作其容器。
 接下来我们要开发功能和DropDownList控件类似的Sorter控件,所以读者页可能已经感觉到,将要建立的控件使用应该类似如下:
<Community:Sorter id=”sorter” ruant=”server”>
<asp:ListItem>item1<asp:ListItem>
… …
<asp:ListItem>itemn<asp:ListItem>
</Community:Sorter>
 注意:可以通过使用类撰写组合现有控件来创作新控件。复合控件等效于使用 页语法创作的用户控件。用户控件和复合控件之间的主要差异是用户控件保持为 .ascx 文本文件,而复合控件则经过编译并保持在程序集中。
 在开发Sorter自定义复合控件前,先看一下常规开发的两个主要步骤:
 A)重写从 Control 继承的受保护的 CreateChildControls 方法,以创建子控件的实例并将它们添加到控件集合。前面说过既然ListItem是子控件就需要将它添加到父容器里,例如如果是DropDownList控件其父容器是DropDownList,如果是ListBox控件,则父容器是ListBox。下面显示了如何重新CreateChildControls
public class Composition1 :