需要更加有个性化的控件,那么你将有两种选择,用户控件 User Control 自定义控件 Custom Control
编写自定控件实质上是在编写一个新的Server控件。难点
实际上普通的Web Form程序稍加修改便可以成为用户控件,当一个Web Form程序被当作Server控件使用时,这个WebForm程序便被称为
“用户控件”用户控件的扩展名为"ascx"用户控件在其他程序中需要使用Register指令将其引用后,才能使用。
<%@ Register TagPrefix="错误!超级链接引用无效。" TagName="错误!超级链接引用无效。" Src="Pathname" %>
TagPrefix确定了用户控件唯一的命名控件(Namespace),多个用户控件将使用同一个TagPrefix TagName 则是这个用户控件的名字,
这个名字可以任取,它用于同一个页面中多个用户控件的互相区别,用户控件的引用形式为:
<TagPrefix:TagName runat="server" />
在用户控件中定义属性时需要注意,属性值的修饰符必须是Public 因为用户控件的解释执行是以类(Class)为原型的,所以只有定义
public 外部才有访问用户控件中的属性。
定义用户控件的时间处理时,必须注意不能使用public修饰符,因为事件只能是在用户控件内部发生,如果使用public修饰则表示可以
外部访问,这显然是不合规则的,所以只能使用private来进行修饰(因为函数默认的修饰符是private,所以程序中可以省略不写)
另外一个常犯的错误是在用户控件中使用HtmlForm控件。这也是不允许的,因为在引用控件的页面中经常会出现HtmlForm控件。如果用
户控件中也包含有HtmlForm控件,那就会出现HtmlForm控件的嵌套使用,这在逻辑上是不能被合理结实的,出错就再所难免了
在程序代码中创建用户控件
在Web Form中,用户控件不仅能通过:<TagPrefix:TagName runat="server" />来创建,而且还能像其他的Server控件一样通过程序代码
来创建
Control cl = LoadControl("pagelet7.ascx");
((Pagelet7CS)c1).Category = "business";
Page.Controls.Add(c1);
Dim cl As UserControl = LoadControl("pagelet7.ascx")
CType(c1,(pagelet7_ascx)).Category = "business"
Page.Controls.Add(c1)
var cl:UserControl = LoadControl("pagelet7.ascx");
(pagelet7_ascx(c1)).Category = "business";
Page.Controls.Add(c1);