创建ASP.NET WEB自定义控件

本文通过一段完整的代码向读者介绍复合自定义控件的制作,包括:自定义属性、事件处理、控件间数据传递等方面的技术。

作者在httpdamao.0538.org有一些控件和代码,并在更新中,有兴趣的读者可以去下载。

以下是一个登陆框的代码,包括:用户名输入TextBox、密码输入TextBox、提交Button、重置Button以及承载以上四项的Panel。控件类名为LoginCtrl。

(例程使用C#)

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

using System.Drawing;

 

namespace TestLib

{

     [DefaultProperty(BackColor),

         ToolboxData({0}LoginCtrl runat=server{0}LoginCtrl)]

     public class LoginCtrl  System.Web.UI.WebControls.WebControl

     {

         private Color _fontColor = Color.Black;声明字体颜色变量

         private Color _backColor = Color.White;声明控件背景变量

首先声明要在复合控件中使用的子控件。

         private Label lblUserName = new Label();显示“用户名”的Label控件

         private Label lblPassWord = new Label();显示“密码”的Label控件

         private TextBox txtUserName = new TextBox();用户名输入的TextBox控件

         private TextBox txtPassWord = new TextBox();密码输入的TextBox控件

         private Button submitButton = new Button();提交Button控件

         private Button clearButton = new Button();重置Button控件

         private System.Web.UI.WebControls.Panel pnlFrame = new System.Web.UI.WebControls.Panel();承载其它控件的容器Panel控件

当然要在符合控件中使用的事件一定要声明的,它们会出现在属性框的事件栏里。

         public event EventHandler SubmitOnClick;声明自定义控件LoginCtrl的提交事件

         public event EventHandler ClearOnClick;声明自定义控件LoginCtrl的重置事件

 

         public LoginCtrl()

         {

刚刚声明的子控件和事件要在这里进行初始化处理。

初始化控件的属性

              this.lblUserName.Text = 用户名;

              this.lblPassWord.Text = 密  码;

              this.txtPassWord.TextMode = System.Web.UI.WebControls.TextBoxMode.Password;

 

              this.pnlFrame.Width = 240;

              this.pnlFrame.Height = 120;

              this.pnlFrame.BackColor = Color.Empty;

添加提交按钮点击事件

              submitButton.Text = 确定;

              submitButton.Click += new EventHandler(this.SubmitBtn_Click);

添加重置按钮点击事件

              clearButton.Text = 重置;

              clearButton.Click += new EventHandler(this.ClearBtn_Click);

将声明的各子控件添加到LoginCtrl中

              this.Controls.Add(this.submitButton);

              this.Controls.Add(this.clearButton);

              this.Controls.Add(this.txtUserName);

              this.Controls.Add(this.txtPassWord);

              this.Controls.Add(this.lblUserName);

              this.Controls.Add(this.lblPassWord);

              this.Controls.Add(this.pnlFrame);

         }

根据自己的需要添加或重载符合控件的公共属性

字体颜色属性

         [Bindable(false),

              Category(Appearance),

              DefaultValue()]

         public override Color ForeColor

         {

              get

              {

                   return this._fontColor;

              }

              set

              {

                   this._fontColor = value;

              }

         }

控件背景属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue()]

         public override Color BackColor

         {

              get

              {

                   return this._backColor;

              }

 

              set

              {

                   this._backColor = value;

              }

         }

用户名属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue()]

         public string UserName

         {

              get

              {

                   return this.txtUserName.Text;

              }

              set

              {

                   this.txtUserName.Text = value;

              }

         }

密码属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue(), Browsable(false)]

         public string PassWord

         {

              get

              {

                   return this.txtPassWord.Text;

              }

              set

              {

                   this.txtPassWord.Text = value;

              }

         }

控件宽度属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue()]

         public override Unit Width

         {

              get

              {

                   return this.pnlFrame.Width;

              }

              set

              {

                   this.pnlFrame.Width = value;

              }

         }

控件高度属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue()]

         public override Unit Height

         {

              get

              {

                   return this.pnlFrame.Height;

              }

              set

              {

                   this.pnlFrame.Height = value;

              }

         }

控件边框颜色属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue()]

         public override Color BorderColor

         {

              get

              {

                   return this.pnlFrame.BorderColor;

              }

              set

              {

                   this.pnlFrame.BorderColor = value;

              }

         }

控件边框样式属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue()]

         public override BorderStyle BorderStyle

         {

              get

              {

                   return this.pnlFrame.BorderStyle;

              }

              set

              {

                   this.pnlFrame.BorderStyle = value;

              }

         }

控件边框宽度属性

         [Bindable(false),

         Category(Appearance),

         DefaultValue()]

         public override Unit BorderWidth

         {

              get

              {

                   return this.pnlFrame.BorderWidth;

              }

              set

              {

                   this.pnlFrame.BorderWidth = value;

              }

         }

下面要把控件输出出去,展示在页面上。

          summary

          将此控件呈现给指定的输出参数。

          summary

          param name=output 要写出到的 HTML 编写器 param

         protected override void Render(HtmlTextWriter output)

         {

              this.pnlFrame.RenderBeginTag(output);输出Panel控件

             

     在Panel中绘制表格

              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(HtmlTextWriterAttribute.Bgcolor,this._backColor.Name);

              output.RenderBeginTag(HtmlTextWriterTag.Table);

             

              output.RenderBeginTag(HtmlTextWriterTag.Tr);

              output.RenderBeginTag(HtmlTextWriterTag.Td);

              在表格中添加Label控件

              this.lblUserName.ForeColor = this._fontColor;

              this.lblUserName.RenderControl(output);

              output.RenderEndTag();

              output.RenderBeginTag(HtmlTextWriterTag.Td);

              在表格中添加TextBox控件

              this.txtUserName.RenderControl(output);

              output.RenderEndTag();

              output.RenderEndTag();

              output.RenderBeginTag(HtmlTextWriterTag.Tr);

              output.RenderBeginTag(HtmlTextWriterTag.Td);

              在表格中添加Label控件

              this.lblPassWord.ForeColor = this._fontColor;

              this.lblPassWord.RenderControl(output);

              output.RenderEndTag();

              output.RenderBeginTag(HtmlTextWriterTag.Td);

在表格中添加TextBox控件

              this.txtPassWord.RenderControl(output);

              output.RenderEndTag();

              output.RenderEndTag();

              output.RenderBeginTag(HtmlTextWriterTag.Tr);

              output.AddAttribute(HtmlTextWriterAttribute.Align,right);

              output.RenderBeginTag(HtmlTextWriterTag.Td);

              在表格中添加Button控件

              this.submitButton.RenderControl(output);

              output.RenderEndTag();

              output.AddAttribute(HtmlTextWriterAttribute.Align,center);

              output.RenderBeginTag(HtmlTextWriterTag.Td);

              在表格中添加Button控件

              this.clearButton.RenderControl(output);

              output.RenderEndTag();

              output.RenderEndTag();

 

              output.RenderEndTag();

 

              this.pnlFrame.RenderEndTag(output);

         }

当按钮点击时怎么做呢?这是个事件冒泡。

         处理提交按钮点击事件

         private void SubmitBtn_Click(object sender, EventArgs e)

         {

              EventArgs e1 = new EventArgs();

              if(this.SubmitOnClick!=null)

                   this.SubmitOnClick(this.submitButton,e1);

         }

         处理重置按钮点击事件

         private void ClearBtn_Click(object sender, EventArgs e)

         {

              this.txtPassWord.Text = ;

              this.txtUserName.Text = ;

              EventArgs e1 = new EventArgs();

              if(this.ClearOnClick!=null)

                   this.ClearOnClick(this.clearButton,e1);

         }

     }

}

编译一下,OK!

这个控件没有什么实际的使用价值,本文制作这个例子是为了向读者展示复合控件的制作方法,也很简单,是吧?

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值