参考一些网上的代码写了一个自定义控件,代码如下:
--------------------------------------------------------------------------------------------------
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;
using SystemFrameWork;
namespace WebControlLibrary
{
/// <summary>
/// LoginControl 的摘要说明。
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:LoginControl runat=server></{0}:LoginControl>")]
public class LoginControl : System.Web.UI.WebControls.WebControl
{
#region 所有的子控件
private Label lblUserName = new Label();
private Label lblPassword = new Label();
private TextBox txtUserName = new TextBox();
private TextBox txtPassword = new TextBox();
private Button btnSubmit = new Button();
private Button btnClear = new Button();
private Panel panel = new Panel();
#endregion
#region 成员变量
private string text;
private Color _clrBackColor;
#endregion
#region 所有的属性
#region Text//文本
/// <summary>
/// 文本
/// </summary>
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
#endregion
#region BackColor//背景色
/// <summary>
/// 背景色
/// </summary>
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public new Color BackColor
{
get
{
return _clrBackColor;
}
set
{
_clrBackColor = value;
}
}
#endregion
#region Height //高度
/// <summary>
/// 高度
/// </summary>
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public new Unit Height
{
get
{
return this.panel.Height;
}
set
{
this.panel.Height = value;
}
}
#endregion
#region Width //宽度
/// <summary>
/// 宽度
/// </summary>
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public new Unit Width
{
get
{
return this.panel.Width;
}
set
{
this.panel.Width = value;
}
}
#endregion
#region BorderColor //边框的颜色
/// <summary>
/// 边框的颜色
/// </summary>
[Browsable(true),
Category("Appearance"),
DefaultValue("")]
public new Color BorderColor
{
get
{
return this.panel.BorderColor;
}
set
{
this.panel.BorderColor = value;
}
}
#endregion
#region BorderStyle//边界样式
public new BorderStyle BorderStyle
{
get
{
return this.panel.BorderStyle;
}
set
{
this.panel.BorderStyle = value;
}
}
#endregion
#endregion
#region 所有的事件
private EventHandler SubmitOnClick;
private EventHandler ClearOnClick;
#endregion
#region LoginControl()//构造函数
/// <summary>
/// 函数名称: LoginControl
/// 功能描述 :构造函数
/// </summary>
public LoginControl()
{
_clrBackColor = Color.White;
//初始化控件的一些属性
lblUserName.Text = "用户名:";
lblPassword.Text = "密码:";
txtUserName.Text = "";
txtPassword.Text = "";
btnSubmit.Text = "提交";
btnSubmit.Click += new EventHandler( this.btnSubmit_Click );
btnClear.Text = "重置";
btnClear.Click += new EventHandler( this.btnClear_Click );
panel.Width = Unit.Percentage(100);
panel.Height = Unit.Percentage(100);
}
#endregion
#region Render()//将此控件呈现给指定的输出参数
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
panel.RenderBeginTag(output);
output.AddAttribute(HtmlTextWriterAttribute.Border,"0");
output.AddAttribute(HtmlTextWriterAttribute.Cellpadding,"0");
output.AddAttribute(HtmlTextWriterAttribute.Cellspacing,"0");
output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Width,"100%");
output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Height,"100");
output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Bgcolor,_clrBackColor.Name);
output.RenderBeginTag(HtmlTextWriterTag.Table);
//用户名
output.RenderBeginTag(HtmlTextWriterTag.Tr);
output.RenderBeginTag(HtmlTextWriterTag.Td);
lblUserName.RenderControl(output);
output.RenderEndTag();
output.RenderBeginTag(HtmlTextWriterTag.Td);
txtUserName.RenderControl(output);
output.RenderEndTag();
output.RenderEndTag();
//密码
output.RenderBeginTag(HtmlTextWriterTag.Tr);
output.RenderBeginTag(HtmlTextWriterTag.Td);
lblPassword.RenderControl(output);
output.RenderEndTag();
output.RenderBeginTag(HtmlTextWriterTag.Td);
txtPassword.RenderControl(output);
output.RenderEndTag();
output.RenderEndTag();
//按钮
output.RenderBeginTag(HtmlTextWriterTag.Tr);
output.RenderBeginTag(HtmlTextWriterTag.Td);
output.RenderEndTag();
output.RenderBeginTag(HtmlTextWriterTag.Td);
btnSubmit.RenderControl(output);
output.Write(" ");
btnClear.RenderControl(output);
output.RenderEndTag();
output.RenderEndTag();
output.RenderEndTag();
panel.RenderEndTag(output);
}
#endregion
#region btnSubmit_Click//提交按钮的处理程序
/// <summary>
/// 提交按钮的处理程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSubmit_Click( object sender , EventArgs e )
{
EventArgs e1 = new EventArgs();
if( this.SubmitOnClick != null )
{
this.SubmitOnClick( this.btnSubmit , e1 );
}
}
#endregion
#region btnClear_Click//"重置"按钮的处理事件
/// <summary>
/// "重置"按钮的处理事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnClear_Click( object sender ,EventArgs e)
{
this.txtPassword.Text = "";
this.txtPassword.Text = "";
if( Page != null )
{
CommonPromptMessage.PromptMessage( this.Page , "无效的用户名!" );
}
EventArgs e1 = new EventArgs();
if(this.ClearOnClick!=null)
this.ClearOnClick(this.btnClear,e1);
}
#endregion
}
}
------------------------------------------------------------------------------------
在运行的时候发现点击submit和reset按钮没有反映,后来在控件中设置断点进行调试
发现根本没有执行btnSubmit_Click和btnClear_Click事件,难道是事件没有绑定?
查了很多地方都没有找到原因..
经过一番艰苦卓绝的调试,终于找到问题所在了,原来我在函数LoginControl()中虽然
创建了一些控件,但是少了下面的语句
this.Controls.Add(btnSubmit);
导致控件虽然创建了,但是并没有被加到容器中,所以就导致了在点击回传的时候,事件绑定
可能丢失了,所以点击按钮总是没有反映
希望我的经验能给各位的调试带来一些思路.