控件的代码如下:
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
}
}
前台的代码如下:
<%@ 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>
<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 = "";
}
}
显示效果如下:

本文介绍了一个自定义登录控件的实现过程,包括控件的属性设置、事件处理及前后端交互等内容。

被折叠的 条评论
为什么被折叠?



