控件开发系列(二)

来源:互联网 发布:cocos2d-x js 编辑:程序博客网 时间:2024/05/23 00:02

作为控件、我们都知道肯定会有一些属性。那么现在我们就给控件加上属性,还是直接上代码来得方便

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.ComponentModel;namespace WriteControl{    [DefaultPropertyAttribute("CardholderNameText")]    [ToolboxData(@"<{0}:TestControlTwo     PaymentMethodText='信用卡' CreditCardNoText='信用卡卡号'     CardholderNameText='信用卡持有者姓名' SubmitButtonText = '提交'      runat='server'></{0}:TestControlTwo>")    ]    public class TestControlTwo : Control    {        private string paymentMethodText = "";        private string creditCardNoText = "";        private string cardholderNameText = "";        private string expirationDateText = "";        private string submitButtonText = "提交";        [BrowsableAttribute(true)]        [DescriptionAttribute("获取和设置信用卡类型")]        [DefaultValueAttribute("信用卡类型")]        [CategoryAttribute("Appearance")]        public virtual string PaymentMethodText        {            get { return this.paymentMethodText; }            set { this.paymentMethodText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置信用卡卡号")]        [DefaultValueAttribute("信用卡卡号")]        [CategoryAttribute("Appearance")]        public virtual string CreditCardNoText        {            get { return this.creditCardNoText; }            set { this.creditCardNoText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置信用卡持有者姓名")]        [DefaultValueAttribute("信用卡持有者姓名")]        [CategoryAttribute("Appearance")]        public virtual string CardholderNameText        {            get { return this.cardholderNameText; }            set { this.cardholderNameText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置最后使用时间")]        [DefaultValueAttribute("最后使用时间")]        [CategoryAttribute("Appearance")]        public virtual string ExpirationDateText        {            get { return this.expirationDateText; }            set { this.expirationDateText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置按钮标签")]        [DefaultValueAttribute("提交")]        [CategoryAttribute("Appearance")]        public virtual string SubmitButtonText        {            get { return this.submitButtonText; }            set { this.submitButtonText = value; }        }               protected override void Render(HtmlTextWriter writer)        {            writer.Write("<table style='width:287px;height:124px;border-width:0;'>");            writer.Write("<tr>");            writer.Write("<td>" + PaymentMethodText + "</td>");            writer.Write("<td>");            writer.Write("<select name='PaymentMethod' id='PaymentMethod' style='width:100%;'>");            writer.Write("<option value='0'>Visa</option>");            writer.Write("<option value='1'>MasterCard</option>");            writer.Write("</select>");            writer.Write("</td>");            writer.Write("</tr>");            writer.Write("<tr>");            writer.Write("<td>" + CreditCardNoText + "</td>");            writer.Write("<td><input name='CreditCardNo' id='CreditCardNo' type='text' /></td>");            writer.Write("</tr>");            writer.Write("<tr>");            writer.Write("<td>" + CardholderNameText + "</td>");            writer.Write("<td><input name='CardholderName' id='CardholderName' type='text' /></td>");            writer.Write("</tr>");            writer.Write("<tr>");            writer.Write("<td>" + ExpirationDateText + "</td>");            writer.Write("<td>");            writer.Write("<select name='Month' id='Month'>");            for (int day = 1; day < 13; day++)            {                if (day < 10)                    writer.Write("<option value='" + day.ToString() + "'>" + "0" + day.ToString() + "</option>");                else                    writer.Write("<option value='" + day.ToString() + "'>" + day.ToString() + "</option>");            }            writer.Write("</select>");            writer.Write(" ");            writer.Write("<select name='Year' id='Year'>");            for (int year = 2005; year < 2015; year++)            {                writer.Write("<option value='" + year.ToString() + "'>" + year.ToString() + "</option>");            }            writer.Write("</select>");            writer.Write("</td>");            writer.Write("</tr>");            writer.Write("<tr>");            writer.Write("<td align='center' colspan='2'>");            writer.Write("<input type='submit' value='" + SubmitButtonText + "' />");            writer.Write("</td>");            writer.Write("</tr>");            writer.Write("</table>");            base.Render(writer);        }    }}

接着我们便可以像平常使用控件那样对这些属性进行修改了

==================================================================================================================================

接下来我们再进行优化,像这种拼接字符串的方式太繁琐,也很容易因为引号的问题而出错。下面的代码跟上面是一样的效果,不过看上去高科技了一些。。。

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.ComponentModel;namespace WriteControl{    public class TestControlThree : Control    {        private string paymentMethodText = "信用卡类型";        private string creditCardNoText = "信用卡卡号";        private string cardholderNameText = "信用卡持有者姓名";        private string expirationDateText = "最后使用时间";        private string submitButtonText = "提交";        [BrowsableAttribute(true)]        [DescriptionAttribute("获取和设置信用卡类型")]        [DefaultValueAttribute("信用卡类型")]        [CategoryAttribute("Appearance")]        public virtual string PaymentMethodText        {            get { return this.paymentMethodText; }            set { this.paymentMethodText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置信用卡卡号")]        [DefaultValueAttribute("信用卡卡号")]        [CategoryAttribute("Appearance")]        public virtual string CreditCardNoText        {            get { return this.creditCardNoText; }            set { this.creditCardNoText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置信用卡持有者姓名")]        [DefaultValueAttribute("信用卡持有者姓名")]        [CategoryAttribute("Appearance")]        public virtual string CardholderNameText        {            get { return this.cardholderNameText; }            set { this.cardholderNameText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置最后使用时间")]        [DefaultValueAttribute("最后使用时间")]        [CategoryAttribute("Appearance")]        public virtual string ExpirationDateText        {            get { return this.expirationDateText; }            set { this.expirationDateText = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置按钮标签")]        [DefaultValueAttribute("提交")]        [CategoryAttribute("Appearance")]        public virtual string SubmitButtonText        {            get { return this.submitButtonText; }            set { this.submitButtonText = value; }        }        protected override void Render(HtmlTextWriter writer)        {            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "0");            writer.RenderBeginTag(HtmlTextWriterTag.Table);            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + PaymentMethodText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "PaymentMethod");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "PaymentMethod");            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");            writer.RenderBeginTag(HtmlTextWriterTag.Select);            writer.AddAttribute(HtmlTextWriterAttribute.Value, "0");            writer.RenderBeginTag(HtmlTextWriterTag.Option);            writer.Write("Visa");            writer.RenderEndTag();            writer.AddAttribute(HtmlTextWriterAttribute.Value, "1");            writer.RenderBeginTag(HtmlTextWriterTag.Option);            writer.Write("MasterCard");            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + CreditCardNoText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CreditCardNo");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CreditCardNo");            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");            writer.RenderBeginTag(HtmlTextWriterTag.Input);            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + CardholderNameText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CardholderName");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CardholderName");            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");            writer.RenderBeginTag(HtmlTextWriterTag.Input);            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + ExpirationDateText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Month");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Month");            writer.RenderBeginTag(HtmlTextWriterTag.Select);            for (int day = 1; day < 13; day++)            {                writer.AddAttribute(HtmlTextWriterAttribute.Value, day.ToString());                writer.RenderBeginTag(HtmlTextWriterTag.Option);                if (day < 10)                    writer.Write("0" + day.ToString());                else                    writer.Write(day);                writer.RenderEndTag();            }            writer.RenderEndTag();            writer.Write(" ");            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Year");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Year");            writer.RenderBeginTag(HtmlTextWriterTag.Select);            for (int year = 2005; year < 2015; year++)            {                writer.AddAttribute(HtmlTextWriterAttribute.Value, year.ToString());                writer.RenderBeginTag(HtmlTextWriterTag.Option);                writer.Write(year);                writer.RenderEndTag();            }            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");            writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");            writer.AddAttribute(HtmlTextWriterAttribute.Value, SubmitButtonText);            writer.RenderBeginTag(HtmlTextWriterTag.Input);            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();        }    }}

接下来如果我们再我们使用控件的页面中加上这样一段代码

if (!IsPostBack)    {      creditcardform.CardholderNameText = "Full Name";      creditcardform.CreditCardNoText = "CreditCardNo";      creditcardform.ExpirationDateText = "ExpirationDate";      creditcardform.PaymentMethodText = "Payment Options";      creditcardform.SubmitButtonText = "Send";    }

这说明了我们给控件赋值没有赋上去啊,那么我们还要对我们的代码进行进一步的修改。最终的代码

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.ComponentModel;namespace WriteControl{    public class TestControlThree : Control    {        [BrowsableAttribute(true)]        [DescriptionAttribute("获取和设置信用卡类型")]        [DefaultValueAttribute("信用卡类型")]        [CategoryAttribute("Appearance")]        public virtual string PaymentMethodText        {            get { return ViewState["PaymentMethodText"] != null ? (string)ViewState["PaymentMethodText"] : "信用卡类型1"; }            set { ViewState["PaymentMethodText"] = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置信用卡卡号")]        [DefaultValueAttribute("信用卡卡号")]        [CategoryAttribute("Appearance")]        public virtual string CreditCardNoText        {            get { return ViewState["CreditCardNoText"] != null ? (string)ViewState["CreditCardNoText"] : "信用卡卡号1"; }            set { ViewState["CreditCardNoText"] = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置信用卡持有者姓名")]        [DefaultValueAttribute("信用卡持有者姓名")]        [CategoryAttribute("Appearance")]        public virtual string CardholderNameText        {            get { return ViewState["CardholderNameText"] != null ? (string)ViewState["CardholderNameText"] : "信用卡持有者姓名1"; }            set { ViewState["CardholderNameText"] = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置最后使用时间")]        [DefaultValueAttribute("最后使用时间")]        [CategoryAttribute("Appearance")]        public virtual string ExpirationDateText        {            get { return ViewState["ExpirationDateText"] != null ? (string)ViewState["ExpirationDateText"] : "最后使用时间1"; }            set { ViewState["ExpirationDateText"] = value; }        }        [BrowsableAttribute(true)]        [DescriptionAttribute("获取或设置按钮标签")]        [DefaultValueAttribute("提交")]        [CategoryAttribute("Appearance")]        public virtual string SubmitButtonText        {            get { return ViewState["SubmitButtonText"] != null ? (string)ViewState["SubmitButtonText"] : "提交"; }            set { ViewState["SubmitButtonText"] = value; }        }        protected override void Render(HtmlTextWriter writer)        {            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "0");            writer.RenderBeginTag(HtmlTextWriterTag.Table);            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + PaymentMethodText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "PaymentMethod");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "PaymentMethod");            writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");            writer.RenderBeginTag(HtmlTextWriterTag.Select);            writer.AddAttribute(HtmlTextWriterAttribute.Value, "0");            writer.RenderBeginTag(HtmlTextWriterTag.Option);            writer.Write("Visa");            writer.RenderEndTag();            writer.AddAttribute(HtmlTextWriterAttribute.Value, "1");            writer.RenderBeginTag(HtmlTextWriterTag.Option);            writer.Write("MasterCard");            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + CreditCardNoText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CreditCardNo");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CreditCardNo");            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");            writer.RenderBeginTag(HtmlTextWriterTag.Input);            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + CardholderNameText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "CardholderName");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "CardholderName");            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");            writer.RenderBeginTag(HtmlTextWriterTag.Input);            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.Write("<strong>" + ExpirationDateText + "</strong>");            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Month");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Month");            writer.RenderBeginTag(HtmlTextWriterTag.Select);            for (int day = 1; day < 13; day++)            {                writer.AddAttribute(HtmlTextWriterAttribute.Value, day.ToString());                writer.RenderBeginTag(HtmlTextWriterTag.Option);                if (day < 10)                    writer.Write("0" + day.ToString());                else                    writer.Write(day);                writer.RenderEndTag();            }            writer.RenderEndTag();            writer.Write(" ");            writer.AddAttribute(HtmlTextWriterAttribute.Name, "Year");            writer.AddAttribute(HtmlTextWriterAttribute.Id, "Year");            writer.RenderBeginTag(HtmlTextWriterTag.Select);            for (int year = 2005; year < 2015; year++)            {                writer.AddAttribute(HtmlTextWriterAttribute.Value, year.ToString());                writer.RenderBeginTag(HtmlTextWriterTag.Option);                writer.Write(year);                writer.RenderEndTag();            }            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderBeginTag(HtmlTextWriterTag.Tr);            writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");            writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");            writer.RenderBeginTag(HtmlTextWriterTag.Td);            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");            writer.AddAttribute(HtmlTextWriterAttribute.Value, SubmitButtonText);            writer.RenderBeginTag(HtmlTextWriterTag.Input);            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();            writer.RenderEndTag();        }    }}

从上面我们不难看出原来存放控件的值是用的ViewState来存放的,好了 这章就到这里。。。

最后附上一张MSDN的属性类别图片