asp.net 2.0 自定义个性化的web复合控件,负两案例

 .net为大家提供了各种各样的控件,也足够的丰富多彩。但是有时候你是不是想开发一些自己的控件以提高开发效率,或者实现一些特殊的功能呢。

下面我讲述一下,建立一个最基本的web复合控件的过程。

首先新建一个C#类库项目,取名叫MyControl吧。删除默认的类文件class1,然后建立我们自己的类文件MyControl.cs。

现在我们向其中添加密码。

在刚生成的代码上先把它修改成这样子

我们将使用以下引用:
案例1
using System;

using System.IO;

using System.Drawing;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

保证我们的MyContro是从WebControl继承的。

public class MyControl:WebControl

下面我们将重写下面两个函数,这都是必须的

protected override void Render(HtmlTextWriter writer)

protected override void CreateChildControls()

修改第一个函数为下面代码

protected override void Render(HtmlTextWriter writer)

{

this.CreateChildControls();

base.Render (writer);

}

修改第二个函数为下面代码

protected override void CreateChildControls()

{

// 清除现有的子控件及其 ViewState

this.Controls.Clear();

this.ClearChildViewState();

// 生成控件树

// 生成环境表格(一行,两个单元格)

Table myTable = new Table();

//build the table row生成表格中的行

TableRow row = new TableRow();

myTable.Rows.Add(row);

// 生成单元格

TableCell myCell = new TableCell();

//用来生成链接按钮导航条的代码。每个按钮都显示有一个 Webdings 字符,可以根据需//禁用,并被绑定到内部的 Click 事件处理程序。

LinkButton myLinkButton = new LinkButton();

myLinkButton.ID = "MyLinkButton";

myLinkButton.Click = new EventHandler(myLinkButton_Click);

myLinkButton.Font.Name = "宋体";

myLinkButton.ToolTip = "好玄啊!";

myLinkButton.Text = "请点我";

myCell.Controls.Add(myLinkButton);

row.Cells.Add(myCell);

Controls.Add(t);

}

下面写你自己的事件的方法吧

private void myLinkButton_Click(object sender,System.EventArgs e)

{

Page.Response.Write("想干点什么就写点什么吧,就这么简单!");

}

下面编译一下吧,然后点工具—》添加/移除工具箱项

然后浏览到你编译生成的dll,现在在工具箱里你看到了什么?

把myControl拖到你自己的webForm上看看效果吧。

OK,就这么简单。

好了,时间不多就先写到这里吧。

我们以后将继续讨论这个自定义控件的扩展。不过聪明的你也应该能扩展出很多功能来了吧。
案例2
另一个两个文本框,两个验证控件,一个按钮的复合控件
using System;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebControlLibrary
{
    [
 
    DefaultProperty("ButtonText"),
    ToolboxData("<{0}:Register runat=/"server/"> </{0}:Register>"),
    ]
    public class Register : CompositeControl
    {
        // 定义私有字段
        private Button submitButton;
        private TextBox nameTextBox;
        private Label nameLabel;
        private TextBox emailTextBox;
        private Label emailLabel;
        private RequiredFieldValidator emailValidator;
        private RequiredFieldValidator nameValidator;

        // 实现属性ButtonText
        [
        Bindable(true),
        Category("Appearance"),
        DefaultValue("按钮"),
        Description("按钮上的文字内容.")
        ]
        public string ButtonText
        {
            get
            {
                EnsureChildControls();
                return submitButton.Text;
            }
            set
            {
                EnsureChildControls();
                submitButton.Text = value;
            }
        }
        // 实现属性Name
        [
        Bindable(true),
        Category("Default"),
        DefaultValue("用户名"),
        Description("用户名.")
        ]
        public string Name
        {
            get
            {
                EnsureChildControls();
                return nameTextBox.Text;
            }
            set
            {
                EnsureChildControls();
                nameTextBox.Text = value;
            }
        }
        // 实现属性NameErrorMessage
        [
        Bindable(true),
        Category("Appearance"),
        DefaultValue("用户名错误"),
        Description("用户名验证错误信息.")
        ]
        public string NameErrorMessage
        {
            get
            {
                EnsureChildControls();
                return nameValidator.ErrorMessage;
            }
            set
            {
                EnsureChildControls();
                nameValidator.ErrorMessage = value;
                nameValidator.ToolTip = value;
            }
        }
        // 实现属性NameLabelText
        [
        Bindable(true),
        Category("Appearance"),
        DefaultValue("用户名"),
        Description("用户名文本框旁的文字.")
        ]
        public string NameLabelText
        {
            get
            {
                EnsureChildControls();
                return nameLabel.Text;
            }
            set
            {
                EnsureChildControls();
                nameLabel.Text = value;
            }
        }
        // 实现属性Email
        [
        Bindable(true),
        Category("Default"),
        DefaultValue("邮件地址"),
        Description("邮件地址.")
        ]
        public string Email
        {
            get
            {
                EnsureChildControls();
                return emailTextBox.Text;
            }
            set
            {
                EnsureChildControls();
                emailTextBox.Text = value;
            }
        }
        // 实现属性EmailErrorMessage
        [
        Bindable(true),
        Category("Appearance"),
        DefaultValue("邮件地址错误"),
        Description("邮件地址验证错误信息.")
        ]
        public string EmailErrorMessage
        {
            get
            {
                EnsureChildControls();
                return emailValidator.ErrorMessage;
            }
            set
            {
                EnsureChildControls();
                emailValidator.ErrorMessage = value;
                emailValidator.ToolTip = value;
            }
        }
        // 实现属性EmailLabelText
        [
        Bindable(true),
        Category("Appearance"),
        DefaultValue("电子邮件"),
        Description("电子邮件文本框旁的文字.")
        ]
        public string EmailLabelText
        {
            get
            {
                EnsureChildControls();
                return emailLabel.Text;
            }
            set
            {
                EnsureChildControls();
                emailLabel.Text = value;

            }
        }
        // 重写ICompositeControlDesignerAccessor接口的RecreateChildContrls方法
        protected override void RecreateChildControls()
        {
            EnsureChildControls();
        }
        // 重写Control基类的CreateChildControls方法
        protected override void CreateChildControls()
        {
            // 清除所有子控件
            //private Button submitButton;
            //private TextBox nameTextBox;
            //private Label nameLabel;
            //private TextBox emailTextBox;
            //private Label emailLabel;
            //private RequiredFieldValidator emailValidator;
            //private RequiredFieldValidator nameValidator;

            Controls.Clear();
            nameLabel = new Label();
            nameTextBox = new TextBox();
            nameTextBox.ID = "nameTextBox";
            nameValidator = new RequiredFieldValidator();
            nameValidator.ID = "validator1";
            nameValidator.ControlToValidate = nameTextBox.ID;
            nameValidator.Text = NameErrorMessage;
            nameValidator.Display = ValidatorDisplay.Static;
            emailLabel = new Label();
            emailTextBox = new TextBox();
            emailTextBox.ID = "emailTextBox";
            emailValidator = new RequiredFieldValidator();
            emailValidator.ID = "validator2";
            emailValidator.ControlToValidate = emailTextBox.ID;
            emailValidator.Text = EmailErrorMessage;
            emailValidator.Display = ValidatorDisplay.Static;
            submitButton = new Button();
            submitButton.ID = "button1";
            this.Controls.Add(nameLabel);
            this.Controls.Add(nameTextBox);
            this.Controls.Add(nameValidator);
            this.Controls.Add(emailLabel);
            this.Controls.Add(emailTextBox);
            this.Controls.Add(emailValidator);
            this.Controls.Add(submitButton);
        }
        // 重写Render方法
        protected override void Render(HtmlTextWriter writer)
        {
            AddAttributesToRender(writer);
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "1", false);

            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            nameLabel.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            nameTextBox.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            nameValidator.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            emailLabel.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            emailTextBox.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            emailValidator.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2", false);
            writer.AddAttribute(HtmlTextWriterAttribute.Align, "right", false);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            submitButton.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            writer.Write("&nbsp;laolaolaolao");
            writer.RenderEndTag();
            writer.RenderEndTag();

            writer.RenderEndTag();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值