All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PHP网站开发中关于包含路径问题的解决方案_php资料_编程技术
精通数据库系列之入门-技巧篇1_mssql学习_编程技术
C#减少图片文件大小和尺寸_[Asp.Net教程]
AJAX实例:动态进度条_[AJAX教程]
mysql,设置,log,保留天数_mssql学习_编程技术
php验证码显示问题解决办法_php资料_编程技术
在ASP.NET程序中值得注意的两个地方_.net资料_编程技术
ASP.NET实现下拉框二级联动组件_[Asp.Net教程]
Asp.net动态生成html页面的一种方法_[Asp.Net教程]
将文本文件导入Sql,server数据库_[SQL,Server教程]
Reading number is top 10 pictures
这玉米,买还是不卖?
Household design comfortable contracted
奇趣的世界记录3
人美胸美腿更美1
A resort photographed beautiful young woman change clothes process vomiting blood1
Fat bird to fly
30 beautiful school beauty4
Fan bingbing black wings for platform and DanLuoWang believes beauty2
In the world the most mysterious 21 place landscape4
西游四格漫画(六)
Download software ranking
1400篇各类破解文章
Ashlynn Video3
Kung fu panda - the secret of the teacher
Popkart Cracked versions Mobile phone games
Sora aoi's film--cangkong_Blue.Sky
Unix video tutorial4
Jinling thirteen stock
dreamweaver8中文版
Tram sex maniac 2 (H) rar bag2
The king of fighters 97(Mobile phone games-apk)
delv published in(发表于) 2014/1/27 6:45:35 Edit(编辑)
.net控件开发(七)之复合控件(1)概念基础篇_[Asp.Net教程]

.net控件开发(七)之复合控件(1)概念基础篇_[Asp.Net教程]

.net控件开发(七)之复合控件(1)概念基础篇_[Asp.Net教程]

  复合控件是什么呢?说白了就是包含了两个或多个已存在控件的集合,复用现有的那些控件。并且来进行生成,回传处理等等。例如,复合控件就像一个团队,它包括了各种各样的人才。通过这个团队来完成所需任务(这里的生成,回传处理等)


  复合控件是一个功能强大的工具,可以生成丰富复杂的组件,这些组件产生自活动对象的相互作用而不是某些字符串生成器对象的标记输出。复合控件以构成控件树的形式呈现,每个构成控件都有其自己的生命周期和事件,并且所有构成控件都联合构成一个全新的 API,并按需要尽可能地抽象化


实现目的:简化控件开发,通过复合在一起,可以把许多任务委托到子控件上。就用上一例说事吧,组合团队的目的是干什么,大家都知道是为了高效的工作,集大家之所长,复合控件也如此,提高开发效率,将各个子控件的能力综合发挥。例如说。当控件包含处理回传数据控件textbox时,可以不必实现IPostBackDataHandler接口,同理,包含Button时,不必实现IPostBackEventHandler接口。


实现复合控件的要点:复合控件可以派生自control类或WebControl类,但在.net2.0中通常派生于CompositeControl类,这与.net 1.x环境下开发复合控件有些不同,在.net 1.x中,复合控件必须实现INamingContainer接口,CompositeControl类表述:


public abstract class CompositeControl : WebControl, INamingContainer, ICompositeControlDesignerAccessor


{


}


CompositeControl类是一个抽象类,为自定义控件提供命名容器和控件设计器功能,该自定义包含全部子控件或使用其他控件功能。


此类实现了INamingContainer接口,该接口没有任何方法,为什么要继承此接口呢?


答案是:它会使页面在控件下创建一个新的命保范围,当实现该接口时,控件包含的任何子控件的表示符,保证页面中确定是唯一的。例如,如果页面上有两个gridview控件,第一个gridview的子控件和第二个gridview子控件会有不同的唯一标表示符。


图例:



事例:就如我们团队有一个团队号(001)[复合控件ID],个人标识(suiqi)[指子控件ID],当我们在团队的标识通常为001-suiqi


开发复合控件不得不去说说两个方法,一个是CreateChildControls方法一个是EnsureChildControls方法。


先说一下CreateChildControls方法:CreateChildControls方法来对子控件进行实例化、初始化、并把这些子控件添加到控件树中.


但一定不能在构造器或OnInit方法中执行该逻辑. 必须在CreateChildControls方法中创建子控件,而不是在诸如实例化或初始化这样的特定阶段创建,这样可以在控件生命周期中任何需要的时候来创建子控件.当创建一个复合控件且由其子控件来处理回传数据时,这样做特别重要.


再详解一下EnsureChildControls方法。该方法为了确保子控件在代码访问它们之前创建好了,该方法来创建军子控件,控件实现中的任何需要访问子控件代码必须先调用EnsureChildControls方法,例如,页面用来定位子控件的FindControl方法的默认实现,就先调用了EnsureChildControls方法.注意,如果子控件没有在控件生命周期中的预先成阶段之前被创建,那么它们会在这个时候根据要求创建.这是因为在PreRender方法的默认实现中调用了所有其Visible属性值为true的控件的EnsureChildcontrols方法。


我们知道它的作用,但还要了解为什么,什么时候调用EnsureChildControls的。


什么时候被调用:在PreRender过程中页面会自动调用EnsureChildControls,这个方法就会自动调用CreateChildControls方法重新建立控件内容。


protected virtual void EnsureChildControls()
{
if (!this.ChildControlsCreated && !this.flags[0x100])
{

this.ChildControlsCreated = true;
}

}


我们先举一个例一个,假如我们要开发一个ShowList类,它有一个字串符属性Text.我们在ShowList类中添加这样一个属性ShowTitle


Private ShowList _sl;


Public string ShowTitle


{


get{ return _sl.Text;}


set{ _sl.Text=value}


}


当我们在CreateChildControls时实例化一个_sl时,这个代码将抛出空指针异常,这个问题是我们在设计器试图设置ShowTitle值引起的。




在设计器中设置属性将在运行时被设置,也在调用CreateChildControls方法之前被调用,如果某些属性在你调用CreateChildControl之前被设置,在.net引擎将实现如下代码:


YourControl newControl=new YourControl();


Newcontrol.ShowTitle="this will cause a null reference";


ParentControl.Controls.Add(newControl);


在创建子控件时,任何时候被初始化,你应该在你的属性访问器中加入一条EnsureChildControls.还可以这样做:


Private ShowList _sl=new ShowList();


Public string ShowTitle


{


get{ return _sl.Text;}


set{ _sl.Text=value}



}


如果你在CreateChildControls方法,设置ShowTitle值时,这个值将有一个默认的Text 值,当创建一个控件时,加上EnsureChildControls() 确保其被创建


Private ShowList _sl;
Public string ShowTitle
{
get{EnsureChildcontrols();
return _sl.Text;}
set{ EnsureChildcontrols();
_sl.Text=value}


}







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.