1 / 26
文档名称:

在net中开发复合控件.doc

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

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

分享

预览

在net中开发复合控件.doc

上传人:s1188831 2019/12/24 文件大小:88 KB

下载得到文件列表

在net中开发复合控件.doc

相关文档

文档介绍

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