控件在WEB开发时经常要用到,虽然有部分已经存在工具箱里,但有时总需要根据自己的要求,开发一些合适自己的控件。接上一节,已经说过了控件的属性,下面来说一下,控件里面究竟怎样定义事件呢? 首先,大家都知道,控件里面的子控件可能会有需要事件,也就是子控件在事件中处理业务流程,还有就是控件本身就需要事件,像button那样,有常用的click事件,那么我们自定义的控件是否有需要这方面的事件存在呢?如果需要应该怎样添加呢?下面介绍一下,控件里面子控件的事件,例如我们在web页面上需要一个简单计数器给用户进行+ - * /这四个操作,下面介绍一下实现的代码,在ServerControl里面添加一个Caler的类。

Code
using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ServerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:Caler runat=server></{0}:Caler>")]
public class Caler : CompositeControl
{
private TextBox txt1; //计算的第一个数
private TextBox txt2; //计算的第二个数
private TextBox txt3; //计算的结果
private Button btn1; //加
private Button btn2; //减
private Button btn3; //乘
private Button btn4; //除
//关于控件文本框只能输入数字的判断大家自己加进,这里只实现用户前提是输入数字的情况下,
//也不包括长度,因为我在textbox中只设了10的长度,多出部分会去掉,实际开发中还需要加进好
//多的判断,这些由大家去添加吧..这里只说明怎样添加控件的事件而已
private Unit ButtonWidth = Unit.Pixel(30);
protected override void CreateChildControls()
{
this.Controls.Clear();
txt1 = new TextBox();
txt1.ID = "txt1";
txt1.MaxLength = 10;
this.Controls.Add(txt1);
txt2 = new TextBox();
txt2.ID = "txt2";
txt2.MaxLength = 10;
this.Controls.Add(txt2);
txt3 = new TextBox();
txt3.ID = "txt3";
txt3.MaxLength = 10;
this.Controls.Add(txt3);
btn1 = new Button();
btn1.ID = "btn1";
btn1.Text = "+";
btn1.Click += new EventHandler(btn1_Click); //添加事件
this.Controls.Add(btn1);
btn2 = new Button();
btn2.ID = "btn2";
btn2.Text = "-";
btn2.Click += new EventHandler(btn2_Click);
this.Controls.Add(btn2);
btn3 = new Button();
btn3.ID = "btn3";
btn3.Text = "*";
btn3.Click += new EventHandler(btn3_Click);
this.Controls.Add(btn3);
btn4 = new Button();
btn4.ID = "btn4";
btn4.Text = "/";
btn4.Click += new EventHandler(btn4_Click);
this.Controls.Add(btn4);
this.ChildControlsCreated = true;
}
protected override void RecreateChildControls()
{
if (this.ChildControlsCreated == false)
{
base.RecreateChildControls();
}
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.txt1.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.txt2.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.txt3.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.btn1.RenderControl(writer);
this.btn2.RenderControl(writer);
this.btn3.RenderControl(writer);
this.btn4.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
private void btn4_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) / Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
private void btn3_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) * Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
private void btn2_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) - Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
private void btn1_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) + Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
}
}

Code
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace ServerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:userRegister runat=server></{0}:userRegister>")]
public class userRegister : CompositeControl
{
#region Conrol
private Label lbU;
private Label lbP;
private Label lbCheckName;
private Label lbCheck;
private Label lbError;
private TextBox userName;
private TextBox passWord;
private TextBox check;
private Button btnLogin;
private Button btnClear;
private RegularExpressionValidator userNameRev;
private RegularExpressionValidator passWordRev;
#endregion
#region settingControl
[Category("LabelTextBox")] //登陆按钮名称
[Description("登陆按钮信息显示")]
public string btnLoginTitle
{
get
{
this.EnsureChildControls();
return this.btnLogin.Text;
}
set
{
this.EnsureChildControls();
this.btnLogin.Text = value;
}
}
[Category("LabelTextBox")]
[Description("登陆按钮的宽度")]
public Unit btnLoginWidth
{
get
{
this.EnsureChildControls();
return this.btnLogin.Width;
}
set
{
this.EnsureChildControls();
this.btnLogin.Width = value;
}
}
[Category("LabelTextBox")]
[Description("登陆按钮的宽度")]
public Unit btnLoginHeight
{
get
{
this.EnsureChildControls();
return this.btnLogin.Height;
}
set
{
this.EnsureChildControls();
this.btnLogin.Height = value;
}
}
[Category("LabelTextBox")] //取消按钮名称
[Description("取消按钮信息显示")]
public string btnClearTitle
{
get
{
this.EnsureChildControls();
return this.btnClear.Text;
}
set
{
this.EnsureChildControls();
this.btnClear.Text = value;
}
}
[Category("LabelTextBox")]
[Description("取消按钮的宽度")]
public Unit btnClearWidth
{
get
{
this.EnsureChildControls();
return this.btnClear.Width;
}
set
{
this.EnsureChildControls();
this.btnClear.Width = value;
}
}
[Category("LabelTextBox")]
[Description("取消按钮的宽度")]
public Unit btnClearHeight
{
get
{
this.EnsureChildControls();
return this.btnClear.Height;
}
set
{
this.EnsureChildControls();
this.btnClear.Height = value;
}
}
[Category("LabelTextBox")] //账号显示名称
[Description("账号标签信息显示")]
public string lbUTitle
{
get
{
this.EnsureChildControls();
return this.lbU.Text;
}
set
{
this.EnsureChildControls();
this.lbU.Text = value;
}
}
[Category("LabelTextBox")]
[Description("账号标签的宽度")]
public Unit lbUWitdth
{
get
{
this.EnsureChildControls();
return this.lbU.Width;
}
set
{
this.EnsureChildControls();
this.lbU.Width = value;
}
}
[Category("LabelTextBox")]
[Description("账号标签的高度")]
public Unit lbUHeight
{
get
{
this.EnsureChildControls();
return this.lbU.Height;
}
set
{
this.EnsureChildControls();
this.lbU.Height = value;
}
}
[Category("LabelTextBox")] //密码显示名称
[Description("密码标签信息显示")]
public string lbPTitle
{
get
{
this.EnsureChildControls();
return this.lbP.Text;
}
set
{
this.EnsureChildControls();
this.lbP.Text = value;
}
}
[Category("LabelTextBox")]
[Description("密码标签的宽度")]
public Unit lbPWitdth
{
get
{
this.EnsureChildControls();
return this.lbP.Width;
}
set
{
this.EnsureChildControls();
this.lbP.Width = value;
}
}
[Category("LabelTextBox")]
[Description("密码标签的高度")]
public Unit lbPHeight
{
get
{
this.EnsureChildControls();
return this.lbP.Height;
}
set
{
this.EnsureChildControls();
this.lbP.Height = value;
}
}
[Category("LabelTextBox")] //验证显示名称
[Description("验证标签信息显示")]
public string lbCheckTitle
{
get
{
this.EnsureChildControls();
return this.lbCheck.Text;
}
set
{
this.EnsureChildControls();
this.lbCheck.Text = value;
}
}
[Category("LabelTextBox")]
[Description("验证标签的宽度")]
public Unit lbCheckWitdth
{
get
{
this.EnsureChildControls();
return this.lbCheck.Width;
}
set
{
this.EnsureChildControls();
this.lbCheck.Width = value;
}
}
[Category("LabelTextBox")]
[Description("验证标签的高度")]
public Unit lbCheckHeight
{
get
{
this.EnsureChildControls();
return this.lbCheck.Height;
}
set
{
this.EnsureChildControls();
this.lbCheck.Height = value;
}
}
[Category("LabelTextBox")] //验证显示名称
[Description("验证名称标签信息显示")]
public string lbCheckNameTitle
{
get
{
this.EnsureChildControls();
return this.lbCheckName.Text;
}
set
{
this.EnsureChildControls();
this.lbCheckName.Text = value;
}
}
[Category("LabelTextBox")]
[Description("验证名称标签的宽度")]
public Unit lbCheckNameWitdth
{
get
{
this.EnsureChildControls();
return this.lbCheckName.Width;
}
set
{
this.EnsureChildControls();
this.lbCheckName.Width = value;
}
}
[Category("LabelTextBox")]
[Description("验证名称标签的高度")]
public Unit lbCheckNameHeight
{
get
{
this.EnsureChildControls();
return this.lbCheckName.Height;
}
set
{
this.EnsureChildControls();
this.lbCheckName.Height = value;
}
}
[Category("LabelTextBox")] //错误显示名称
[Description("错误标签信息显示")]
public string lbErrorTitle
{
get
{
this.EnsureChildControls();
return this.lbError.Text;
}
set
{
this.EnsureChildControls();
this.lbError.Text = value;
}
}
[Category("LabelTextBox")]
[Description("错误标签的宽度")]
public Unit lbErrorWitdth
{
get
{
this.EnsureChildControls();
return this.lbError.Width;
}
set
{
this.EnsureChildControls();
this.lbError.Width = value;
}
}
[Category("LabelTextBox")]
[Description("错误标签的高度")]
public Unit lbErrorHeight
{
get
{
this.EnsureChildControls();
return this.lbError.Height;
}
set
{
this.EnsureChildControls();
this.lbError.Height = value;
}
}
[Category("LabelTextBox")]
[Description("错误标签的高度")]
public Color lbErrorFontColor
{
get
{
this.EnsureChildControls();
return this.lbError.ForeColor;
}
set
{
this.EnsureChildControls();
this.lbError.ForeColor = value;
}
}
[Category("LabelTextBox")] //账号
[Description("账户号码")]
public string userNameValue
{
get
{
this.EnsureChildControls();
return this.userName.Text;
}
set
{
this.EnsureChildControls();
this.userName.Text = value;
}
}
[Category("LabelTextBox")]
[Description("账号文本框宽度")]
public Unit userNameWitdth
{
get
{
this.EnsureChildControls();
return this.userName.Width;
}
set
{
this.EnsureChildControls();
this.userName.Width = value;
}
}
[Category("LabelTextBox")]
[Description("账号文本框高度")]
public Unit userNameHeight
{
get
{
this.EnsureChildControls();
return this.userName.Height;
}
set
{
this.EnsureChildControls();
this.userName.Height = value;
}
}
[Category("LabelTextBox")] //验证码
[Description("验证码文本")]
public string checkValue
{
get
{
this.EnsureChildControls();
return this.check.Text;
}
set
{
this.EnsureChildControls();
this.check.Text = value;
}
}
[Category("LabelTextBox")]
[Description("验证码文本框宽度")]
public Unit checkWitdth
{
get
{
this.EnsureChildControls();
return this.check.Width;
}
set
{
this.EnsureChildControls();
this.check.Width = value;
}
}
[Category("LabelTextBox")]
[Description("验证码文本框高度")]
public Unit checkHeight
{
get
{
this.EnsureChildControls();
return this.check.Height;
}
set
{
this.EnsureChildControls();
this.check.Height = value;
}
}
[Category("Security")] //密码
[Description("密码")]
[PasswordPropertyText(true)]
public string passWordValue
{
get
{
this.EnsureChildControls();
return this.passWord.Text;
}
set
{
this.EnsureChildControls();
this.passWord.Text = value;
}
}
[Category("LabelTextBox")]
[Description("密码文本框宽度")]
public Unit passWordWitdth
{
get
{
this.EnsureChildControls();
return this.passWord.Width;
}
set
{
this.EnsureChildControls();
this.passWord.Width = value;
}
}
[Category("LabelTextBox")]
[Description("密码文本框高度")]
public Unit passWordHeight
{
get
{
this.EnsureChildControls();
return this.passWord.Height;
}
set
{
this.EnsureChildControls();
this.passWord.Height = value;
}
}
[Category("LabelTextBox")] //表达式
[Description("验证表账号达式")]
public string userNameValidateExpression
{
get
{
this.EnsureChildControls();
return userNameRev.ValidationExpression;
}
set
{
this.EnsureChildControls();
this.userNameRev.ValidationExpression = value;
}
}
[Category("LabelTextBox")]
[Description("验证账号错误提示")]
public string userNameErrorMessage
{
get
{
this.EnsureChildControls();
return userNameRev.ErrorMessage;
}
set
{
this.EnsureChildControls();
this.userNameRev.ErrorMessage = value;
}
}
[Category("LabelTextBox")]
[Description("验证表账号达式")]
public string passWordValidateExpression
{
get
{
this.EnsureChildControls();
return passWordRev.ValidationExpression;
}
set
{
this.EnsureChildControls();
this.passWordRev.ValidationExpression = value;
}
}
[Category("LabelTextBox")]
[Description("验证账号错误提示")]
public string passWordErrorMessage
{
get
{
this.EnsureChildControls();
return passWordRev.ErrorMessage;
}
set
{
this.EnsureChildControls();
this.passWordRev.ErrorMessage = value;
}
}
#endregion
public userRegister()
{
}
protected override void CreateChildControls()
{
Random random = new Random();
this.Controls.Clear();
//label lbCheck
lbCheck = new Label();
this.lbCheck.ID = "lbCheck1";
this.lbCheck.Width = Unit.Pixel(35);
this.lbCheck.Height = Unit.Pixel(20);
this.lbCheck.Text = random.Next(9999).ToString("0000");
this.Controls.Add(lbCheck);
//label lbCheckName
lbCheckName = new Label();
this.lbCheckName.ID = "lbCheckName1";
this.lbCheckName.Width = Unit.Pixel(60);
this.lbCheckName.Height = Unit.Pixel(20);
this.lbCheckName.Text = "验证码:";
this.Controls.Add(lbCheckName);
//lbError
lbError = new Label();
this.lbError.ID = "lbError1";
this.lbError.Width = Unit.Pixel(60);
this.lbError.Height = Unit.Pixel(20);
this.lbError.Text = "";
this.lbError.ForeColor = Color.Red;
this.Controls.Add(lbError);
//btnLogin
btnLogin = new Button();
this.btnLogin.ID = "btnLogin1";
this.btnLogin.Width = Unit.Pixel(45);
this.btnLogin.Height = Unit.Pixel(20);
this.btnLogin.Click += new EventHandler(this.btnLoginClick);
this.btnLogin.Text = "登陆";
this.Controls.Add(btnLogin);
//btnClear
btnClear = new Button();
this.btnClear.ID = "btnClear1";
this.btnClear.Width = Unit.Pixel(45);
this.btnClear.Height = Unit.Pixel(20);
this.btnClear.Click += new EventHandler(this.btnClearClick);
this.btnClear.Text = "取消";
this.Controls.Add(btnClear);
//Label lbU
lbU = new Label();
this.lbU.ID = "lbU1";
this.lbU.Text = "账号: ";
this.lbU.Height = Unit.Pixel(20);
this.lbU.Width = Unit.Pixel(50);
this.Controls.Add(lbU);
//Label lbP
lbP = new Label();
this.lbP.ID = "lbP1";
this.lbP.Text = "密码: ";
this.lbP.Height = Unit.Pixel(20);
this.lbP.Width = Unit.Pixel(50);
this.Controls.Add(lbP);
//TextBox userName
userName = new TextBox();
this.userName.ID = "userName1";
this.userName.Height = Unit.Pixel(20);
this.userName.Width = Unit.Pixel(150);
this.Controls.Add(userName);
//TextBox check
check = new TextBox();
this.check.ID = "Check1";
this.check.Width = Unit.Pixel(100);
this.check.Height = Unit.Pixel(20);
this.Controls.Add(check);
//TextBox passWord
passWord = new TextBox();
this.passWord.ID = "passWord1";
this.passWord.Height = Unit.Pixel(20);
this.passWord.Width = Unit.Pixel(150);
this.Controls.Add(passWord);
//RegularExpressionValidator userNameRev
userNameRev = new RegularExpressionValidator();
this.userNameRev.ID = "userNameRev1";
this.userNameRev.ControlToValidate = this.userName.ID;
this.userNameRev.ErrorMessage = "账号输入有错";
this.userNameRev.Display = ValidatorDisplay.Static;
this.Controls.Add(userNameRev);
//RegularExpressionValidator passWordRev
passWordRev = new RegularExpressionValidator();
this.passWordRev.ID = "passWordRev1";
this.passWordRev.ControlToValidate = this.passWord.ID;
this.passWordRev.ErrorMessage = "账号输入有错";
this.passWordRev.Display = ValidatorDisplay.Static;
this.Controls.Add(passWordRev);
this.ChildControlsCreated = true;
}
public event EventHandler btnLogin_Click;
public event EventHandler btnClear_Click;
private void btnLoginClick(object sender, EventArgs e)
{
if (this.btnLogin_Click != null)
{
this.btnLogin_Click(this, e);
}
}
private void btnClearClick(object sender, EventArgs e)
{
if (this.btnClear_Click != null)
{
this.btnClear_Click(this, e);
}
}
protected override void RecreateChildControls()
{
if (this.ChildControlsCreated == false)
{
base.RecreateChildControls();
}
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, " 0");
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第一行userName
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbU.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.userName.RenderControl(writer);
writer.RenderEndTag();
if (string.IsNullOrEmpty(this.userNameValidateExpression) == false && this.DesignMode == false)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.userNameRev.RenderControl(writer);
writer.RenderEndTag();
}
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第二行passWord
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbP.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.passWord.RenderControl(writer);
writer.RenderEndTag();
if (string.IsNullOrEmpty(this.passWordValidateExpression) == false && this.DesignMode == false)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.passWordRev.RenderControl(writer);
writer.RenderEndTag();
}
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第三行验证
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbCheckName.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.check.RenderControl(writer);
this.lbCheck.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第四行按钮
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.btnLogin.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.btnClear.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第五行错误提示
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbError.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
}
}


using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ServerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:Caler runat=server></{0}:Caler>")]
public class Caler : CompositeControl
{
private TextBox txt1; //计算的第一个数
private TextBox txt2; //计算的第二个数
private TextBox txt3; //计算的结果
private Button btn1; //加
private Button btn2; //减
private Button btn3; //乘
private Button btn4; //除
//关于控件文本框只能输入数字的判断大家自己加进,这里只实现用户前提是输入数字的情况下,
//也不包括长度,因为我在textbox中只设了10的长度,多出部分会去掉,实际开发中还需要加进好
//多的判断,这些由大家去添加吧..这里只说明怎样添加控件的事件而已
private Unit ButtonWidth = Unit.Pixel(30);
protected override void CreateChildControls()
{
this.Controls.Clear();
txt1 = new TextBox();
txt1.ID = "txt1";
txt1.MaxLength = 10;
this.Controls.Add(txt1);
txt2 = new TextBox();
txt2.ID = "txt2";
txt2.MaxLength = 10;
this.Controls.Add(txt2);
txt3 = new TextBox();
txt3.ID = "txt3";
txt3.MaxLength = 10;
this.Controls.Add(txt3);
btn1 = new Button();
btn1.ID = "btn1";
btn1.Text = "+";
btn1.Click += new EventHandler(btn1_Click); //添加事件
this.Controls.Add(btn1);
btn2 = new Button();
btn2.ID = "btn2";
btn2.Text = "-";
btn2.Click += new EventHandler(btn2_Click);
this.Controls.Add(btn2);
btn3 = new Button();
btn3.ID = "btn3";
btn3.Text = "*";
btn3.Click += new EventHandler(btn3_Click);
this.Controls.Add(btn3);
btn4 = new Button();
btn4.ID = "btn4";
btn4.Text = "/";
btn4.Click += new EventHandler(btn4_Click);
this.Controls.Add(btn4);
this.ChildControlsCreated = true;
}
protected override void RecreateChildControls()
{
if (this.ChildControlsCreated == false)
{
base.RecreateChildControls();
}
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.txt1.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.txt2.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.txt3.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.btn1.RenderControl(writer);
this.btn2.RenderControl(writer);
this.btn3.RenderControl(writer);
this.btn4.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
private void btn4_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) / Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
private void btn3_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) * Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
private void btn2_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) - Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
private void btn1_Click(object sender, EventArgs e)
{
if (this.txt1.Text.Trim().Length > 0 && this.txt2.Text.Trim().Length > 0)
{
txt3.Text = (Convert.ToDouble(txt1.Text) + Convert.ToDouble(txt2.Text)).ToString();
}
else
{
txt3.Text = "";
}
}
}
}
编译,在页面上拖进控件,运行你就会发现下面的页面:
通过上面发现,和我们平时页面控件子控件事件差不多吧。都是在控件生成的时候,添加控件事件。
下面介如一下,控件的事件,在ServerControl中添加一个类叫userRegister,再把下面的代码添加进去


using System;
using System.Collections.Generic;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace ServerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:userRegister runat=server></{0}:userRegister>")]
public class userRegister : CompositeControl
{
#region Conrol
private Label lbU;
private Label lbP;
private Label lbCheckName;
private Label lbCheck;
private Label lbError;
private TextBox userName;
private TextBox passWord;
private TextBox check;
private Button btnLogin;
private Button btnClear;
private RegularExpressionValidator userNameRev;
private RegularExpressionValidator passWordRev;
#endregion
#region settingControl
[Category("LabelTextBox")] //登陆按钮名称
[Description("登陆按钮信息显示")]
public string btnLoginTitle
{
get
{
this.EnsureChildControls();
return this.btnLogin.Text;
}
set
{
this.EnsureChildControls();
this.btnLogin.Text = value;
}
}
[Category("LabelTextBox")]
[Description("登陆按钮的宽度")]
public Unit btnLoginWidth
{
get
{
this.EnsureChildControls();
return this.btnLogin.Width;
}
set
{
this.EnsureChildControls();
this.btnLogin.Width = value;
}
}
[Category("LabelTextBox")]
[Description("登陆按钮的宽度")]
public Unit btnLoginHeight
{
get
{
this.EnsureChildControls();
return this.btnLogin.Height;
}
set
{
this.EnsureChildControls();
this.btnLogin.Height = value;
}
}
[Category("LabelTextBox")] //取消按钮名称
[Description("取消按钮信息显示")]
public string btnClearTitle
{
get
{
this.EnsureChildControls();
return this.btnClear.Text;
}
set
{
this.EnsureChildControls();
this.btnClear.Text = value;
}
}
[Category("LabelTextBox")]
[Description("取消按钮的宽度")]
public Unit btnClearWidth
{
get
{
this.EnsureChildControls();
return this.btnClear.Width;
}
set
{
this.EnsureChildControls();
this.btnClear.Width = value;
}
}
[Category("LabelTextBox")]
[Description("取消按钮的宽度")]
public Unit btnClearHeight
{
get
{
this.EnsureChildControls();
return this.btnClear.Height;
}
set
{
this.EnsureChildControls();
this.btnClear.Height = value;
}
}
[Category("LabelTextBox")] //账号显示名称
[Description("账号标签信息显示")]
public string lbUTitle
{
get
{
this.EnsureChildControls();
return this.lbU.Text;
}
set
{
this.EnsureChildControls();
this.lbU.Text = value;
}
}
[Category("LabelTextBox")]
[Description("账号标签的宽度")]
public Unit lbUWitdth
{
get
{
this.EnsureChildControls();
return this.lbU.Width;
}
set
{
this.EnsureChildControls();
this.lbU.Width = value;
}
}
[Category("LabelTextBox")]
[Description("账号标签的高度")]
public Unit lbUHeight
{
get
{
this.EnsureChildControls();
return this.lbU.Height;
}
set
{
this.EnsureChildControls();
this.lbU.Height = value;
}
}
[Category("LabelTextBox")] //密码显示名称
[Description("密码标签信息显示")]
public string lbPTitle
{
get
{
this.EnsureChildControls();
return this.lbP.Text;
}
set
{
this.EnsureChildControls();
this.lbP.Text = value;
}
}
[Category("LabelTextBox")]
[Description("密码标签的宽度")]
public Unit lbPWitdth
{
get
{
this.EnsureChildControls();
return this.lbP.Width;
}
set
{
this.EnsureChildControls();
this.lbP.Width = value;
}
}
[Category("LabelTextBox")]
[Description("密码标签的高度")]
public Unit lbPHeight
{
get
{
this.EnsureChildControls();
return this.lbP.Height;
}
set
{
this.EnsureChildControls();
this.lbP.Height = value;
}
}
[Category("LabelTextBox")] //验证显示名称
[Description("验证标签信息显示")]
public string lbCheckTitle
{
get
{
this.EnsureChildControls();
return this.lbCheck.Text;
}
set
{
this.EnsureChildControls();
this.lbCheck.Text = value;
}
}
[Category("LabelTextBox")]
[Description("验证标签的宽度")]
public Unit lbCheckWitdth
{
get
{
this.EnsureChildControls();
return this.lbCheck.Width;
}
set
{
this.EnsureChildControls();
this.lbCheck.Width = value;
}
}
[Category("LabelTextBox")]
[Description("验证标签的高度")]
public Unit lbCheckHeight
{
get
{
this.EnsureChildControls();
return this.lbCheck.Height;
}
set
{
this.EnsureChildControls();
this.lbCheck.Height = value;
}
}
[Category("LabelTextBox")] //验证显示名称
[Description("验证名称标签信息显示")]
public string lbCheckNameTitle
{
get
{
this.EnsureChildControls();
return this.lbCheckName.Text;
}
set
{
this.EnsureChildControls();
this.lbCheckName.Text = value;
}
}
[Category("LabelTextBox")]
[Description("验证名称标签的宽度")]
public Unit lbCheckNameWitdth
{
get
{
this.EnsureChildControls();
return this.lbCheckName.Width;
}
set
{
this.EnsureChildControls();
this.lbCheckName.Width = value;
}
}
[Category("LabelTextBox")]
[Description("验证名称标签的高度")]
public Unit lbCheckNameHeight
{
get
{
this.EnsureChildControls();
return this.lbCheckName.Height;
}
set
{
this.EnsureChildControls();
this.lbCheckName.Height = value;
}
}
[Category("LabelTextBox")] //错误显示名称
[Description("错误标签信息显示")]
public string lbErrorTitle
{
get
{
this.EnsureChildControls();
return this.lbError.Text;
}
set
{
this.EnsureChildControls();
this.lbError.Text = value;
}
}
[Category("LabelTextBox")]
[Description("错误标签的宽度")]
public Unit lbErrorWitdth
{
get
{
this.EnsureChildControls();
return this.lbError.Width;
}
set
{
this.EnsureChildControls();
this.lbError.Width = value;
}
}
[Category("LabelTextBox")]
[Description("错误标签的高度")]
public Unit lbErrorHeight
{
get
{
this.EnsureChildControls();
return this.lbError.Height;
}
set
{
this.EnsureChildControls();
this.lbError.Height = value;
}
}
[Category("LabelTextBox")]
[Description("错误标签的高度")]
public Color lbErrorFontColor
{
get
{
this.EnsureChildControls();
return this.lbError.ForeColor;
}
set
{
this.EnsureChildControls();
this.lbError.ForeColor = value;
}
}
[Category("LabelTextBox")] //账号
[Description("账户号码")]
public string userNameValue
{
get
{
this.EnsureChildControls();
return this.userName.Text;
}
set
{
this.EnsureChildControls();
this.userName.Text = value;
}
}
[Category("LabelTextBox")]
[Description("账号文本框宽度")]
public Unit userNameWitdth
{
get
{
this.EnsureChildControls();
return this.userName.Width;
}
set
{
this.EnsureChildControls();
this.userName.Width = value;
}
}
[Category("LabelTextBox")]
[Description("账号文本框高度")]
public Unit userNameHeight
{
get
{
this.EnsureChildControls();
return this.userName.Height;
}
set
{
this.EnsureChildControls();
this.userName.Height = value;
}
}
[Category("LabelTextBox")] //验证码
[Description("验证码文本")]
public string checkValue
{
get
{
this.EnsureChildControls();
return this.check.Text;
}
set
{
this.EnsureChildControls();
this.check.Text = value;
}
}
[Category("LabelTextBox")]
[Description("验证码文本框宽度")]
public Unit checkWitdth
{
get
{
this.EnsureChildControls();
return this.check.Width;
}
set
{
this.EnsureChildControls();
this.check.Width = value;
}
}
[Category("LabelTextBox")]
[Description("验证码文本框高度")]
public Unit checkHeight
{
get
{
this.EnsureChildControls();
return this.check.Height;
}
set
{
this.EnsureChildControls();
this.check.Height = value;
}
}
[Category("Security")] //密码
[Description("密码")]
[PasswordPropertyText(true)]
public string passWordValue
{
get
{
this.EnsureChildControls();
return this.passWord.Text;
}
set
{
this.EnsureChildControls();
this.passWord.Text = value;
}
}
[Category("LabelTextBox")]
[Description("密码文本框宽度")]
public Unit passWordWitdth
{
get
{
this.EnsureChildControls();
return this.passWord.Width;
}
set
{
this.EnsureChildControls();
this.passWord.Width = value;
}
}
[Category("LabelTextBox")]
[Description("密码文本框高度")]
public Unit passWordHeight
{
get
{
this.EnsureChildControls();
return this.passWord.Height;
}
set
{
this.EnsureChildControls();
this.passWord.Height = value;
}
}
[Category("LabelTextBox")] //表达式
[Description("验证表账号达式")]
public string userNameValidateExpression
{
get
{
this.EnsureChildControls();
return userNameRev.ValidationExpression;
}
set
{
this.EnsureChildControls();
this.userNameRev.ValidationExpression = value;
}
}
[Category("LabelTextBox")]
[Description("验证账号错误提示")]
public string userNameErrorMessage
{
get
{
this.EnsureChildControls();
return userNameRev.ErrorMessage;
}
set
{
this.EnsureChildControls();
this.userNameRev.ErrorMessage = value;
}
}
[Category("LabelTextBox")]
[Description("验证表账号达式")]
public string passWordValidateExpression
{
get
{
this.EnsureChildControls();
return passWordRev.ValidationExpression;
}
set
{
this.EnsureChildControls();
this.passWordRev.ValidationExpression = value;
}
}
[Category("LabelTextBox")]
[Description("验证账号错误提示")]
public string passWordErrorMessage
{
get
{
this.EnsureChildControls();
return passWordRev.ErrorMessage;
}
set
{
this.EnsureChildControls();
this.passWordRev.ErrorMessage = value;
}
}
#endregion
public userRegister()
{
}
protected override void CreateChildControls()
{
Random random = new Random();
this.Controls.Clear();
//label lbCheck
lbCheck = new Label();
this.lbCheck.ID = "lbCheck1";
this.lbCheck.Width = Unit.Pixel(35);
this.lbCheck.Height = Unit.Pixel(20);
this.lbCheck.Text = random.Next(9999).ToString("0000");
this.Controls.Add(lbCheck);
//label lbCheckName
lbCheckName = new Label();
this.lbCheckName.ID = "lbCheckName1";
this.lbCheckName.Width = Unit.Pixel(60);
this.lbCheckName.Height = Unit.Pixel(20);
this.lbCheckName.Text = "验证码:";
this.Controls.Add(lbCheckName);
//lbError
lbError = new Label();
this.lbError.ID = "lbError1";
this.lbError.Width = Unit.Pixel(60);
this.lbError.Height = Unit.Pixel(20);
this.lbError.Text = "";
this.lbError.ForeColor = Color.Red;
this.Controls.Add(lbError);
//btnLogin
btnLogin = new Button();
this.btnLogin.ID = "btnLogin1";
this.btnLogin.Width = Unit.Pixel(45);
this.btnLogin.Height = Unit.Pixel(20);
this.btnLogin.Click += new EventHandler(this.btnLoginClick);
this.btnLogin.Text = "登陆";
this.Controls.Add(btnLogin);
//btnClear
btnClear = new Button();
this.btnClear.ID = "btnClear1";
this.btnClear.Width = Unit.Pixel(45);
this.btnClear.Height = Unit.Pixel(20);
this.btnClear.Click += new EventHandler(this.btnClearClick);
this.btnClear.Text = "取消";
this.Controls.Add(btnClear);
//Label lbU
lbU = new Label();
this.lbU.ID = "lbU1";
this.lbU.Text = "账号: ";
this.lbU.Height = Unit.Pixel(20);
this.lbU.Width = Unit.Pixel(50);
this.Controls.Add(lbU);
//Label lbP
lbP = new Label();
this.lbP.ID = "lbP1";
this.lbP.Text = "密码: ";
this.lbP.Height = Unit.Pixel(20);
this.lbP.Width = Unit.Pixel(50);
this.Controls.Add(lbP);
//TextBox userName
userName = new TextBox();
this.userName.ID = "userName1";
this.userName.Height = Unit.Pixel(20);
this.userName.Width = Unit.Pixel(150);
this.Controls.Add(userName);
//TextBox check
check = new TextBox();
this.check.ID = "Check1";
this.check.Width = Unit.Pixel(100);
this.check.Height = Unit.Pixel(20);
this.Controls.Add(check);
//TextBox passWord
passWord = new TextBox();
this.passWord.ID = "passWord1";
this.passWord.Height = Unit.Pixel(20);
this.passWord.Width = Unit.Pixel(150);
this.Controls.Add(passWord);
//RegularExpressionValidator userNameRev
userNameRev = new RegularExpressionValidator();
this.userNameRev.ID = "userNameRev1";
this.userNameRev.ControlToValidate = this.userName.ID;
this.userNameRev.ErrorMessage = "账号输入有错";
this.userNameRev.Display = ValidatorDisplay.Static;
this.Controls.Add(userNameRev);
//RegularExpressionValidator passWordRev
passWordRev = new RegularExpressionValidator();
this.passWordRev.ID = "passWordRev1";
this.passWordRev.ControlToValidate = this.passWord.ID;
this.passWordRev.ErrorMessage = "账号输入有错";
this.passWordRev.Display = ValidatorDisplay.Static;
this.Controls.Add(passWordRev);
this.ChildControlsCreated = true;
}
public event EventHandler btnLogin_Click;
public event EventHandler btnClear_Click;
private void btnLoginClick(object sender, EventArgs e)
{
if (this.btnLogin_Click != null)
{
this.btnLogin_Click(this, e);
}
}
private void btnClearClick(object sender, EventArgs e)
{
if (this.btnClear_Click != null)
{
this.btnClear_Click(this, e);
}
}
protected override void RecreateChildControls()
{
if (this.ChildControlsCreated == false)
{
base.RecreateChildControls();
}
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, " 0");
writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第一行userName
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbU.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.userName.RenderControl(writer);
writer.RenderEndTag();
if (string.IsNullOrEmpty(this.userNameValidateExpression) == false && this.DesignMode == false)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.userNameRev.RenderControl(writer);
writer.RenderEndTag();
}
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第二行passWord
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbP.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.passWord.RenderControl(writer);
writer.RenderEndTag();
if (string.IsNullOrEmpty(this.passWordValidateExpression) == false && this.DesignMode == false)
{
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.passWordRev.RenderControl(writer);
writer.RenderEndTag();
}
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第三行验证
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbCheckName.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.check.RenderControl(writer);
this.lbCheck.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第四行按钮
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.btnLogin.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.btnClear.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //第五行错误提示
writer.RenderBeginTag(HtmlTextWriterTag.Td);
this.lbError.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
}
}
编译,然后添加控件到页面,查看控件的事件,你会发现有二个你自己的定义的事件在里面了,点击二个事件中的一个,到代码界面,输入你要的代码。
protected void userRegister1_btnClear_Click(object sender, EventArgs e)
{
Response.Write("事件btnClear执行了");
}
protected void userRegister1_btnLogin_Click(object sender, EventArgs e)
{
Response.Write("事件btnLogin执行了");
}
运行你就知道效果了。。本来还想插入一个图片的,但不知为什么现在浏览器特慢,快死掉了,我感觉到应该是上面那个代码生成的图片太大了,占用资源,大家亲自写一个自己喜欢的控件吧,把事件添加进去,多动手才会有提高,刚看是没用的,看的时候你感觉好简单,到自己做的时候问题就出现好多了.
标签:
asp.net 控件事件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?