using System;
using System.Web.UI;
using System.Web.UI.Design;
using System.ComponentModel;
using System.ComponentModel.Design;
namespace YuanHeng.ServerControls
{
[
Designer(typeof(YuanHeng.ServerControls.Design.CompositeControlDesigner))
]
public class CompositeControl : System.Web.UI.WebControls.WebControl,System.Web.UI.INamingContainer
{
public override ControlCollection Controls
{
get
{
this.EnsureChildControls();
return base.Controls;
}
}
}
}
======================
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace YuanHeng.ServerControls
{
[
DefaultEvent("Logon"),
DefaultProperty("Name")
]
public class LoginUI : YuanHeng.ServerControls.CompositeControl
{
private Button _button;
private TextBox _nameTextBox;
private Label _nameLabel;
private TextBox _passwordTextBox;
private Label _passwordLabel;
private RequiredFieldValidator _nameValidator;
private RequiredFieldValidator _passwordValidator;
private static readonly object EventLogon = new object();
#region 制定控件中子控件的属性
[
Bindable(true),
Category("Appearance"),
DefaultValue(typeof(Unit), ""),
Description("该输入文本框的宽度。")
]
public Unit InputWidth
{
set
{
EnsureChildControls();
_passwordTextBox.Width = value;
_nameTextBox.Width=value;
}
}
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description("该登录按钮要显示的文本。")
]
public string ButtonText
{
get
{
EnsureChildControls();
return _button.Text;
}
set
{
EnsureChildControls();
_button.Text = value;
}
}
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description("用户名称。")
]
public string Name
{
get
{
EnsureChildControls();
return _nameTextBox.Text;
}
set
{
EnsureChildControls();
_nameTextBox.Text = value;
}
}
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description(
"用户登录名称验证时要显示的出错文本。")
]
public string NameErrorMessage
{
get
{
EnsureChildControls();
return _nameValidator.ErrorMessage;
}
set
{
EnsureChildControls();
_nameValidator.ErrorMessage = value;
_nameValidator.ToolTip = value;
}
}
[
Bindable(true),
Category("Apperance"),
DefaultValue(""),
Description("该名称标签要显示的文本。")
]
public string NameLabel
{
get
{
EnsureChildControls();
return _nameLabel.Text;
}
set
{
EnsureChildControls();
_nameLabel.Text = value;
}
}
[
Browsable(false),
DesignerSerializationVisibility(
DesignerSerializationVisibility.Hidden)
]
public string Password
{
get
{
EnsureChildControls();
return _passwordTextBox.Text;
}
}
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description(
"用户登录密码验证时要显示的出错文本。")
]
public string PasswordErrorMessage
{
get
{
EnsureChildControls();
return _passwordValidator.ErrorMessage;
}
set
{
EnsureChildControls();
_passwordValidator.ErrorMessage = value;
_passwordValidator.ToolTip = value;
}
}
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description("该密码标签要显示的文本。")
]
public string PasswordLabel
{
get
{
EnsureChildControls();
return _passwordLabel.Text;
}
set
{
EnsureChildControls();
_passwordLabel.Text = value;
}
}
#endregion
#region 事件
[
Category("Action"),
Description("在用户点击登录按钮时激发。")
]
public event EventHandler Logon
{
add
{
Events.AddHandler(EventLogon, value);
}
remove
{
Events.RemoveHandler(EventLogon, value);
}
}
protected virtual void OnLogon(EventArgs e)
{
EventHandler logonHandler = (EventHandler)Events[EventLogon];
if (logonHandler != null)
{
logonHandler(this, e);
}
}
#endregion
#region Event bubbling
protected override bool OnBubbleEvent(object source, EventArgs e)
{
bool handled = false;
if (e is CommandEventArgs)
{
CommandEventArgs ce = (CommandEventArgs)e;
if (ce.CommandName == "Logon")
{
OnLogon(EventArgs.Empty);
handled = true;
}
}
return handled;
}
#endregion Event bubbling
#region 覆盖父类方法
protected override void CreateChildControls()
{
Controls.Clear();
_nameLabel = new Label();
_nameTextBox = new TextBox();
_nameTextBox.ID = "nameTextBox";
_nameValidator = new RequiredFieldValidator();
_nameValidator.ID = "validator1";
_nameValidator.ControlToValidate = _nameTextBox.ID;
_nameValidator.Text = "*";
_nameValidator.Display = ValidatorDisplay.Static;
_passwordLabel = new Label();
_passwordTextBox = new TextBox();
_passwordTextBox.TextMode = TextBoxMode.Password;
_passwordTextBox.ID = "passwordTextBox";
_passwordValidator = new RequiredFieldValidator();
_passwordValidator.ID = "validator2";
_passwordValidator.ControlToValidate = _passwordTextBox.ID;
_passwordValidator.Text = "*";
_passwordValidator.Display = ValidatorDisplay.Static;
_button = new Button();
_button.ID = "button1";
_button.CommandName = "Logon";
FirstFocus _firstFocus = new FirstFocus();
_firstFocus.ControlToFocus = "nameTextBox";
this.Controls.Add(_nameLabel);
this.Controls.Add(_nameTextBox);
this.Controls.Add(_nameValidator);
this.Controls.Add(_passwordLabel);
this.Controls.Add(_passwordTextBox);
this.Controls.Add(_passwordValidator);
this.Controls.Add(_button);
this.Controls.Add(_firstFocus);
}
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding,
"1", false);
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_nameLabel.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_nameTextBox.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_nameValidator.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderEndTag(); // Tr
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_passwordLabel.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_passwordTextBox.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_passwordValidator.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderEndTag(); // Tr
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.AddAttribute(HtmlTextWriterAttribute.Align, "right");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_button.RenderControl(writer);
writer.RenderEndTag(); // Td
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write(" ");
writer.RenderEndTag(); // Td
writer.RenderEndTag(); // Tr
writer.RenderEndTag(); // Table
}
#endregion Overriden methods
}
}