控件的代码如下:
using
System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyLabel
... {
/**//// <summary>
/// 演示冒泡事件
/// </summary>
[ToolboxData(@"<{0}:MyLogin2 runat='server' LabelPassword='密 码' LabelUserName='用户名' LoginButtonText='提交' UserNameError='请输入用户名' PasswordError='请输入密码' CancelButtonText='取消' OnCancel='Cancel_Click' OnLogin='Login_Click'></{0}:MyLogin2>")]
public class MyLogin2 : WebControl, INamingContainer
...{
private TextBox _userName;
private TextBox _password;
private Label _labUsername;
private Label _labPassword;
private Button _loginButton;
private Button _cancelButton;
private RequiredFieldValidator _userNameRFValidator;
private RequiredFieldValidator _passwordRFValidator;
private static readonly object EventLogin = new object();
private static readonly object EventCancel = new object();
属性#region 属性
[Bindable(true),Description("指定用户名输入框的值")]
public string LabelUserName
...{
get
...{
EnsureChildControls();
return _labUsername.Text;
}
set
...{
EnsureChildControls();
_labUsername.Text = value;
}
}
[Bindable(true), Description("指定密码输入框的值")]
public string LabelPassword
...{
get
...{
EnsureChildControls();
return _labPassword.Text;
}
set
...{
EnsureChildControls();
_labPassword.Text = value;
}
}
[Bindable(true), Description("设置用户名输入框的值")]
public string UserName
...{
get
...{
EnsureChildControls();
return _userName.Text;
}
set
...{
EnsureChildControls();
_userName.Text = value;
}
}
[Bindable(true), Description("设置未输入用户名时的出错提示")]
public string UserNameError
...{
get
...{
EnsureChildControls();
return _userNameRFValidator.ErrorMessage;
}
set
...{
EnsureChildControls();
_userNameRFValidator.ErrorMessage = value;
}
}
[Bindable(true), Description("设置未输入密码时的出错提示")]
public string PasswordError
...{
get
...{
EnsureChildControls();
return _passwordRFValidator.ErrorMessage;
}
set
...{
EnsureChildControls();
_passwordRFValidator.ErrorMessage = value;
}
}
[Bindable(true), Description("设置密码输入框的值")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Password
...{
get
...{
EnsureChildControls();
return _password.Text;
}
set
...{
EnsureChildControls();
_password.Text = value;
}
}
[Bindable(true), Description("设置登录按钮的值")]
public string LoginButtonText
...{
get
...{
EnsureChildControls();
return _loginButton.Text;
}
set
...{
EnsureChildControls();
_loginButton.Text = value;
}
}
[Bindable(true), Description("设置取消按钮的值")]
public string CancelButtonText
...{
get
...{
EnsureChildControls();//确定是否包含子控件,不存在则调用CreateChildControls方法生成子控件
return _cancelButton.Text;
}
set
...{
EnsureChildControls();
_cancelButton.Text = value;
}
}
public string BackGround
...{
get
...{
return ViewState["BackGround"] != null ? (string)ViewState["BackGround"] : String.Empty;
}
set
...{
ViewState["BackGround"] = value;
}
}
#endregion
生成控件#region 生成控件
public event EventHandler Login
...{
add
...{
Events.AddHandler(EventLogin, value);
}
remove
...{
Events.RemoveHandler(EventCancel, value);
}
}
public event EventHandler Cancel
...{
add
...{
Events.AddHandler(EventCancel, value);
}
remove
...{
Events.RemoveHandler(EventCancel, value);
}
}
/**//// <summary>
/// 提交按钮事件
/// </summary>
/// <param name="e"></param>
protected void OnLogin(EventArgs e)
...{
EventHandler hander = (EventHandler)Events[EventLogin];
if (hander != null)
...{
hander(this,e);
}
}
/**//// <summary>
/// 取消按钮事件
/// </summary>
/// <param name="e"></param>
protected void OnCancel(EventArgs e)
...{
EventHandler hander = (EventHandler)Events[EventCancel];
if (hander != null)
...{
hander(this, e);
}
}
/**//// <summary>
/// 创建子控件
/// </summary>
protected override void CreateChildControls()//
...{
Controls.Clear();
_labPassword = new Label();
_labPassword.ID = "MyLogin2_labelPassword";
_labUsername = new Label();
_labUsername.ID = "MyLogin2_labelUserName";
_loginButton = new Button();
_loginButton.ID = "MyLogin2_loginButton";
_loginButton.CommandName = "Login";
_cancelButton = new Button();
_cancelButton.ID = "MyLogin2_CancelButton";
_cancelButton.CommandName = "Cancel";
_cancelButton.CausesValidation = false;
_password = new TextBox();
_password.ID = "MyLogin2_txtPassword";
_password.TextMode = TextBoxMode.Password;//设置为密码模式
_userName = new TextBox();
_userName.ID = "MyLogin2_txtUserName";
_userNameRFValidator = new RequiredFieldValidator();
_userNameRFValidator.ID = "MyLogin2_UNRFValidator";
_userNameRFValidator.ControlToValidate = "MyLogin2_txtUserName";
_passwordRFValidator = new RequiredFieldValidator();
_passwordRFValidator.ID = "MyLogin2_PRFValidator";
_passwordRFValidator.ControlToValidate = "MyLogin2_txtPassword";
this.Controls.Add(_userName);
this.Controls.Add(_password);
this.Controls.Add(_loginButton);
this.Controls.Add(_cancelButton);
this.Controls.Add(_labUsername);
this.Controls.Add(_labPassword);
this.Controls.Add(_passwordRFValidator);
this.Controls.Add(_userNameRFValidator);
}
/**//// <summary>
/// 事件冒泡
/// </summary>
/// <param name="source"></param>
/// <param name="args"></param>
/// <returns></returns>
protected override bool OnBubbleEvent(object source, EventArgs args)
...{
bool hander = false;
if (args is CommandEventArgs)
...{
CommandEventArgs ce = (CommandEventArgs)args;
if (ce.CommandName == "Login")
...{
OnLogin(EventArgs.Empty);
hander = true;
}
else if (ce.CommandName == "Cancel")
...{
OnCancel(EventArgs.Empty);
hander = true;
}
}
return hander;
}
protected override void Render(HtmlTextWriter writer)
...{
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Border, "1px");
writer.AddAttribute(HtmlTextWriterAttribute.Width, "400");
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundImage, BackGround);
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Width, "100");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_labUsername.RenderControl(writer);//输出控件
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_userName.RenderControl(writer);
_userNameRFValidator.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_labPassword.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_password.RenderControl(writer);
_passwordRFValidator.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_loginButton.RenderControl(writer);
writer.Write(" ");
_cancelButton.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
#endregion
}
}
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyLabel
... {
/**//// <summary>
/// 演示冒泡事件
/// </summary>
[ToolboxData(@"<{0}:MyLogin2 runat='server' LabelPassword='密 码' LabelUserName='用户名' LoginButtonText='提交' UserNameError='请输入用户名' PasswordError='请输入密码' CancelButtonText='取消' OnCancel='Cancel_Click' OnLogin='Login_Click'></{0}:MyLogin2>")]
public class MyLogin2 : WebControl, INamingContainer
...{
private TextBox _userName;
private TextBox _password;
private Label _labUsername;
private Label _labPassword;
private Button _loginButton;
private Button _cancelButton;
private RequiredFieldValidator _userNameRFValidator;
private RequiredFieldValidator _passwordRFValidator;
private static readonly object EventLogin = new object();
private static readonly object EventCancel = new object();
属性#region 属性
[Bindable(true),Description("指定用户名输入框的值")]
public string LabelUserName
...{
get
...{
EnsureChildControls();
return _labUsername.Text;
}
set
...{
EnsureChildControls();
_labUsername.Text = value;
}
}
[Bindable(true), Description("指定密码输入框的值")]
public string LabelPassword
...{
get
...{
EnsureChildControls();
return _labPassword.Text;
}
set
...{
EnsureChildControls();
_labPassword.Text = value;
}
}
[Bindable(true), Description("设置用户名输入框的值")]
public string UserName
...{
get
...{
EnsureChildControls();
return _userName.Text;
}
set
...{
EnsureChildControls();
_userName.Text = value;
}
}
[Bindable(true), Description("设置未输入用户名时的出错提示")]
public string UserNameError
...{
get
...{
EnsureChildControls();
return _userNameRFValidator.ErrorMessage;
}
set
...{
EnsureChildControls();
_userNameRFValidator.ErrorMessage = value;
}
}
[Bindable(true), Description("设置未输入密码时的出错提示")]
public string PasswordError
...{
get
...{
EnsureChildControls();
return _passwordRFValidator.ErrorMessage;
}
set
...{
EnsureChildControls();
_passwordRFValidator.ErrorMessage = value;
}
}
[Bindable(true), Description("设置密码输入框的值")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Password
...{
get
...{
EnsureChildControls();
return _password.Text;
}
set
...{
EnsureChildControls();
_password.Text = value;
}
}
[Bindable(true), Description("设置登录按钮的值")]
public string LoginButtonText
...{
get
...{
EnsureChildControls();
return _loginButton.Text;
}
set
...{
EnsureChildControls();
_loginButton.Text = value;
}
}
[Bindable(true), Description("设置取消按钮的值")]
public string CancelButtonText
...{
get
...{
EnsureChildControls();//确定是否包含子控件,不存在则调用CreateChildControls方法生成子控件
return _cancelButton.Text;
}
set
...{
EnsureChildControls();
_cancelButton.Text = value;
}
}
public string BackGround
...{
get
...{
return ViewState["BackGround"] != null ? (string)ViewState["BackGround"] : String.Empty;
}
set
...{
ViewState["BackGround"] = value;
}
}
#endregion
生成控件#region 生成控件
public event EventHandler Login
...{
add
...{
Events.AddHandler(EventLogin, value);
}
remove
...{
Events.RemoveHandler(EventCancel, value);
}
}
public event EventHandler Cancel
...{
add
...{
Events.AddHandler(EventCancel, value);
}
remove
...{
Events.RemoveHandler(EventCancel, value);
}
}
/**//// <summary>
/// 提交按钮事件
/// </summary>
/// <param name="e"></param>
protected void OnLogin(EventArgs e)
...{
EventHandler hander = (EventHandler)Events[EventLogin];
if (hander != null)
...{
hander(this,e);
}
}
/**//// <summary>
/// 取消按钮事件
/// </summary>
/// <param name="e"></param>
protected void OnCancel(EventArgs e)
...{
EventHandler hander = (EventHandler)Events[EventCancel];
if (hander != null)
...{
hander(this, e);
}
}
/**//// <summary>
/// 创建子控件
/// </summary>
protected override void CreateChildControls()//
...{
Controls.Clear();
_labPassword = new Label();
_labPassword.ID = "MyLogin2_labelPassword";
_labUsername = new Label();
_labUsername.ID = "MyLogin2_labelUserName";
_loginButton = new Button();
_loginButton.ID = "MyLogin2_loginButton";
_loginButton.CommandName = "Login";
_cancelButton = new Button();
_cancelButton.ID = "MyLogin2_CancelButton";
_cancelButton.CommandName = "Cancel";
_cancelButton.CausesValidation = false;
_password = new TextBox();
_password.ID = "MyLogin2_txtPassword";
_password.TextMode = TextBoxMode.Password;//设置为密码模式
_userName = new TextBox();
_userName.ID = "MyLogin2_txtUserName";
_userNameRFValidator = new RequiredFieldValidator();
_userNameRFValidator.ID = "MyLogin2_UNRFValidator";
_userNameRFValidator.ControlToValidate = "MyLogin2_txtUserName";
_passwordRFValidator = new RequiredFieldValidator();
_passwordRFValidator.ID = "MyLogin2_PRFValidator";
_passwordRFValidator.ControlToValidate = "MyLogin2_txtPassword";
this.Controls.Add(_userName);
this.Controls.Add(_password);
this.Controls.Add(_loginButton);
this.Controls.Add(_cancelButton);
this.Controls.Add(_labUsername);
this.Controls.Add(_labPassword);
this.Controls.Add(_passwordRFValidator);
this.Controls.Add(_userNameRFValidator);
}
/**//// <summary>
/// 事件冒泡
/// </summary>
/// <param name="source"></param>
/// <param name="args"></param>
/// <returns></returns>
protected override bool OnBubbleEvent(object source, EventArgs args)
...{
bool hander = false;
if (args is CommandEventArgs)
...{
CommandEventArgs ce = (CommandEventArgs)args;
if (ce.CommandName == "Login")
...{
OnLogin(EventArgs.Empty);
hander = true;
}
else if (ce.CommandName == "Cancel")
...{
OnCancel(EventArgs.Empty);
hander = true;
}
}
return hander;
}
protected override void Render(HtmlTextWriter writer)
...{
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Border, "1px");
writer.AddAttribute(HtmlTextWriterAttribute.Width, "400");
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundImage, BackGround);
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Width, "100");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_labUsername.RenderControl(writer);//输出控件
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_userName.RenderControl(writer);
_userNameRFValidator.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_labPassword.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_password.RenderControl(writer);
_passwordRFValidator.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_loginButton.RenderControl(writer);
writer.Write(" ");
_cancelButton.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
#endregion
}
}
前台的代码如下:
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default3.aspx.cs
"
Inherits
=
"
Default3
"
%>
<% @ Register Assembly = " MyLabel " Namespace = " MyLabel " TagPrefix = " cc1 " %>
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title > 无标题页 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
< cc1:MyLogin2 ID = " MyLogin2_1 " runat = " server " BackGround = " F:/dbexamproject/dbexamweb/images/toplineright.jpg " CancelButtonText = " 取消 "
Height = " 122px " LabelPassword = " 密 码 " LabelUserName = " 用户名 " LoginButtonText = " 提交 " OnCancel = " Cancel_Click "
OnLogin = " Login_Click " PasswordError = " 请输入密码 " UserNameError = " 请输入用户名 " Width = " 373px " />
</ div >
</ form >
</ body >
</ html >
<% @ Register Assembly = " MyLabel " Namespace = " MyLabel " TagPrefix = " cc1 " %>
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title > 无标题页 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
< cc1:MyLogin2 ID = " MyLogin2_1 " runat = " server " BackGround = " F:/dbexamproject/dbexamweb/images/toplineright.jpg " CancelButtonText = " 取消 "
Height = " 122px " LabelPassword = " 密 码 " LabelUserName = " 用户名 " LoginButtonText = " 提交 " OnCancel = " Cancel_Click "
OnLogin = " Login_Click " PasswordError = " 请输入密码 " UserNameError = " 请输入用户名 " Width = " 373px " />
</ div >
</ form >
</ body >
</ html >
按钮点击事件如下:
using
System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Default3 : System.Web.UI.Page
... {
protected void Page_Load(object sender, EventArgs e)
...{
}
protected void Login_Click(Object sender, EventArgs e)
...{
MyLogin2_1.UserName = "张三";
}
protected void Cancel_Click(object sender, EventArgs e)
...{
MyLogin2_1.UserName = "";
}
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Default3 : System.Web.UI.Page
... {
protected void Page_Load(object sender, EventArgs e)
...{
}
protected void Login_Click(Object sender, EventArgs e)
...{
MyLogin2_1.UserName = "张三";
}
protected void Cancel_Click(object sender, EventArgs e)
...{
MyLogin2_1.UserName = "";
}
}
显示效果如下: