完成基本复合控件基本呈现
(1)首先你要熟悉以下的属性和方法
Control.CreateChildControls 方法用于创建子控件
Control.EnsureChildControls 方法用于确认是否已创建子控件,如果未创建完成的话则调用CreateChildControls 方法创建子控件
Control.ChildControlsCreated 属性 获取一个值,是否已创建子控件
(2)了解并实现INamingContainer接口
用户控件UserControl类则继承了INamingContainer接口,确包保子控件具有唯一的ID名称,那复合控件也需要实现这个接口达到一样的目的,这个是值得注意的地方.复合控件以类撰写的方法来添加控件即CreateChildControls 方法
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;
![]()
namespace ComponentControl
![]()
![]()
{
public class Ctrl9:WebControl,INamingContainer
![]()
{
private Label m_NameLabel = new Label();
private Label m_PwdLabel = new Label();
private TextBox m_NameTextBox = new TextBox();
private TextBox m_PwdTextBox = new TextBox();
private Button m_Button = new Button();
private RequiredFieldValidator m_NameValidator = new RequiredFieldValidator();
private RequiredFieldValidator m_PwdValidator = new RequiredFieldValidator();
![]()
![]()
![]()
/**//// <summary>
/// 重写Controls的get属性,保证在访问复合控件的子控件时子控件已经被创建
/// EnsureChildControls()方法检查子控件是否被创建,如果没有被创建,
/// 将自动调用CreateChildControls()方法来创建子控件
/// </summary>
public override ControlCollection Controls
![]()
{
get
![]()
{
EnsureChildControls();
return base.Controls;
}
}
![]()
![]()
CreateChildControls#region CreateChildControls
![]()
protected override void CreateChildControls()
![]()
{
Controls.Clear();
![]()
m_NameLabel.ID = "NameLabelID";
m_NameLabel.Text = "Label1";
![]()
m_PwdLabel.ID = "PwdLabelID";
m_PwdLabel.Text = "Label2";
![]()
m_NameTextBox.ID = "NameTextBoxID";
![]()
m_PwdTextBox.TextMode = TextBoxMode.Password;
m_PwdTextBox.ID = "PwdTextBoxID";
![]()
m_Button.ID = "ButtonID";
m_Button.Text = "Button1";
![]()
m_NameValidator.ID = "Validator1";
m_NameValidator.ErrorMessage = "请输入用户名";
m_NameValidator.ControlToValidate = m_NameTextBox.ID;
m_NameValidator.Text = "*";
![]()
m_PwdValidator.ID = "Validator2";
m_PwdValidator.ErrorMessage = "请输入密码";
m_PwdValidator.ControlToValidate = m_PwdTextBox.ID;
m_PwdValidator.Text = "*";
![]()
Controls.Add(m_NameLabel);
Controls.Add(m_PwdLabel);
Controls.Add(m_NameTextBox);
Controls.Add(m_PwdTextBox);
Controls.Add(m_Button);
Controls.Add(m_NameValidator);
Controls.Add(m_PwdValidator);
}
![]()
#endregion
![]()
![]()
Properties#region Properties
![]()
[Description("Button显示的文本")]
public string ButtonText
![]()
{
get
![]()
{
return m_Button.Text;
}
set
![]()
{
m_Button.Text = value;
}
}
![]()
[Description("NameLabel显示的文本")]
public string NameLabelText
![]()
{
get
![]()
{
return m_NameLabel.Text;
}
set
![]()
{
m_NameLabel.Text = value;
}
}
![]()
[Description("PwdLabel显示的文本")]
public string PwdLabelText
![]()
{
get
![]()
{
return m_PwdLabel.Text;
}
set
![]()
{
m_PwdLabel.Text = value;
}
}
![]()
[Description("用户名")]
public string Name
![]()
{
![]()
get
{ return m_NameTextBox.Text; }
![]()
set
{ m_NameTextBox.Text = value; }
}
![]()
[Description("密码")]
public string Pwd
![]()
{
![]()
get
{ return m_PwdTextBox.Text; }
}
![]()
#endregion
![]()
![]()
Render#region Render
![]()
protected override void Render(HtmlTextWriter writer)
![]()
{
writer.RenderBeginTag(HtmlTextWriterTag.Table);
![]()
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
m_NameLabel.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
m_NameTextBox.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
m_NameValidator.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
![]()
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
m_PwdLabel.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
m_PwdTextBox.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
m_PwdValidator.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
![]()
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Cols, "3");
writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
m_Button.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
![]()
writer.RenderEndTag();
}
![]()
#endregion
}
}
![]()