《ASP.NET2.0揭秘》读书笔记——构建组合控件
2009-05-25 10:43
232 查看
构建组合控件,顾名思义就是利用已有的控件来重新组合成新的控件。
所有的ASP.NET 控件都有Controls属性来表示它的所有子控件。构建组合控件从CompositeControl类派生,一般会重写CreateChildControls()方法。
下面示例代码演示了组合一个TextBox控件和RequiredFieldValidator控件。
Code
1 using System;
2 using System.Web.UI.WebControls;
3
4 namespace myControls
5 {
6 public class RequiredTextBox : CompositeControl
7 {
8 private TextBox input;
9 private RequiredFieldValidator validator;
10
11 public string Text
12 {
13 get
14 {
15 EnsureChildControls();
16 return input.Text;
17 }
18 set
19 {
20 EnsureChildControls();
21 input.Text = value;
22 }
23 }
24
25 protected override void CreateChildControls()
26 {
27 input = new TextBox();
28 input.ID = "input";
29 this.Controls.Add(input);
30
31 validator = new RequiredFieldValidator();
32 validator.ID = "valInput";
33 validator.ControlToValidate = input.ID;
34 validator.ErrorMessage = "(Required)";
35 validator.Display = ValidatorDisplay.Dynamic;
36 this.Controls.Add(validator);
37 }
38 }
39 }
里面没有重写基类的RenderContens方法而是重写了CreateChildControls方法,注意在Text属性的Get和Set方法都调用了EnsureChildControls()方法,该方法是确保能CreateChildControls()方法,但不会重复调用。因为没有调用CreateChildControls()方法就使用input.Text的话就会造成空引用的异常。必须先创建了子控件才能访问子控件的任何属性,这是毫无疑问的。
所有的ASP.NET 控件都有Controls属性来表示它的所有子控件。构建组合控件从CompositeControl类派生,一般会重写CreateChildControls()方法。
下面示例代码演示了组合一个TextBox控件和RequiredFieldValidator控件。
Code
1 using System;
2 using System.Web.UI.WebControls;
3
4 namespace myControls
5 {
6 public class RequiredTextBox : CompositeControl
7 {
8 private TextBox input;
9 private RequiredFieldValidator validator;
10
11 public string Text
12 {
13 get
14 {
15 EnsureChildControls();
16 return input.Text;
17 }
18 set
19 {
20 EnsureChildControls();
21 input.Text = value;
22 }
23 }
24
25 protected override void CreateChildControls()
26 {
27 input = new TextBox();
28 input.ID = "input";
29 this.Controls.Add(input);
30
31 validator = new RequiredFieldValidator();
32 validator.ID = "valInput";
33 validator.ControlToValidate = input.ID;
34 validator.ErrorMessage = "(Required)";
35 validator.Display = ValidatorDisplay.Dynamic;
36 this.Controls.Add(validator);
37 }
38 }
39 }
里面没有重写基类的RenderContens方法而是重写了CreateChildControls方法,注意在Text属性的Get和Set方法都调用了EnsureChildControls()方法,该方法是确保能CreateChildControls()方法,但不会重复调用。因为没有调用CreateChildControls()方法就使用input.Text的话就会造成空引用的异常。必须先创建了子控件才能访问子控件的任何属性,这是毫无疑问的。
相关文章推荐
- 《ASP.NET2.0揭秘》读书笔记——构建混合控件
- 《ASP.NET2.0揭秘》读书笔记——构建完全生成控件
- 组合.NET数据控件构建强大用户接口
- 《ASP.NET2.0揭秘》读书笔记——构建自定义控件前你必须思考的两个问题
- 《java并发编程实战》读书笔记11--构建自定义的同步工具,条件队列,Condition,AQS
- 自定义组合控件的过程
- java并发编程实战学习笔记之对象的组合与基础构建模块
- 自定义组合控件
- Android编辑信息界面,组合控件的封装
- Android 自定义组合控件View
- android UI进阶之自定义组合控件
- android 组合控件
- ComboxBox控件、checklistbox控件和listbox控件的组合开发
- 【读书笔记《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)
- 【读书笔记《Android游戏编程之从零开始》】7.Android 游戏开发常用的系统控件(Dialog)
- 组合控件 圆环 ring
- Developer Express控件组合中的GridControl控件,如何自动显示每一行的序号
- Android 自定义view第二弹——组合控件
- ASP.NET中DataList控件和AspNetPager控件的组合使用并实现分页
- Android自定义组合控件