.net控件开发之复合控件:概念基础篇
我们先举一个例一个,假如我们要开发一个ShowList类,它有一个字串符属性Text.我们在ShowList类中添加这样一个属性ShowTitle
Private ShowList _sl;当我们在CreateChildControls时实例化一个_sl时,这个代码将抛出空指针异常,这个问题是我们在设计器试图设置ShowTitle值引起的。
Public string ShowTitle
{
get{ return _sl.Text;}
set{ _sl.Text=value}
<Yourcontrol runat=server id="newcontrol" ShowTitle="this will cause a null reference"/>在设计器中设置属性将在运行时被设置,也在调用CreateChildControls方法之前被调用,如果某些属性在你调用CreateChildControl之前被设置,在.net引擎将实现如下代码:
YourControl newControl=new YourControl();在创建子控件时,任何时候被初始化,你应该在你的属性访问器中加入一条EnsureChildControls.还可以这样做:
Newcontrol.ShowTitle="this will cause a null reference";
ParentControl.Controls.Add(newControl);
Private ShowList _sl=new ShowList();如果你在CreateChildControls方法,设置ShowTitle值时,这个值将有一个默认的Text 值,当创建一个控件时,加上EnsureChildControls() 确保其被创建
Public string ShowTitle
{
get{ return _sl.Text;}
set{ _sl.Text=value}
}
Private ShowList _sl;
Public string ShowTitle
{
get{EnsureChildcontrols();
return _sl.Text;}
set{ EnsureChildcontrols();
_sl.Text=value}
}
0
相关文章