技术开发 频道

.net控件开发之复合控件:概念基础篇


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

Public string ShowTitle

{

get{ return _sl.Text;}

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

<Yourcontrol runat=server id="newcontrol" ShowTitle="this will cause a null reference"/>
    在设计器中设置属性将在运行时被设置,也在调用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}

}




0
相关文章