自定义控件(Task01)——可以设置属性的控件

源代码:13033480群共享

上面的自定义控件属性是不能设置的,一个链接控件,应该具有可以设置的最基本的链接属性HyperLink和显示的文本Text

为了添加这两个属性,简单一点地做,我们的类需要继承自WebControl类。WebControl类已经是一个基本的控件类,它已经具备了一个控件最基本的结构,只是里面的内容还都是空的,我们要做的是,添加HyperLinkText属性,设置控件的标记A,添加控件的属性href,添加要显示的文本Text

一、在类中添加可设置的属性比较简单:

1HyperLink属性

        public string HyperLink

        {

            get

            {

                return (string)ViewState["HyperLink"];

            }

            set

            {

                if (value.IndexOf("http://") == -1)

                {

                    throw new ApplicationException("Specify HTTP as the protocol.");

                }

                else

                {

                    ViewState["HyperLink"] =value;

                }

            }

        }

2Text属性

        public string Text

        {

            get

            {

                return (string)ViewState["Text"];

            }

 

            set

            {

                ViewState["Text"] =value;

            }

        }

二、设置控件的标记A

这个,只需要把参数A,传递给基类WebControl的构建函数就可以了

public LinkWebControl(): base(HtmlTextWriterTag.A)

三、添加控件的属性href

设置好HyperLink属性和Text属性后,需要把这两个属性在呈现之前添加到HtmlTextWriter类变量output中,代码如下:

        protected override void AddAttributesToRender(HtmlTextWriter output)

        {

            output.AddAttribute(HtmlTextWriterAttribute.Href, HyperLink);

            base.AddAttributesToRender(output);

        }

四、同样道理,要显示的文本Text的内容,需要在呈现前来内容之前呈现出来,因为WebControl呈现的文本为空,所以,放在呈现内容之后也可以的:

        protected override void RenderContents(HtmlTextWriter output)

        {

            output.Write(Text);

            base.RenderContents(output); // Calls RenderChildren()

        }

五、HyperLinkText属性,如果没有设置,控件需要有的默认的属性,这两个属性设置可以Renter()之前的Onitial函数中:

        protected override void OnInit(EventArgs e)

        {

            Page.RegisterRequiresViewStateEncryption();

            base.OnInit(e);

            if (ViewState["HyperLink"] ==null)

            {

                ViewState["HyperLink"] ="http://www.jsfsc.edu.cn";

            }

 

            if (ViewState["Text"] ==null)

            {

                ViewState["Text"] ="江苏食品职业技术学院";

            }

        }

六、在窗体中使用自定义控件方法和前面是一样的:

1、添加引用。

2、注册

<%@ Register TagPrefix="apress"Namespace="CustomServerControlsLibrary"Assembly="CustomServerControlsLibrary"%>

3、添加控件

        <div>

            <spxy:LinkWebControlID="LinkWebControl1"runat="server"BackColor="#00FF00"Font-Names="Verdana"

                Font-Size="Large"ForeColor="#FF0000">

            </spxy:LinkWebControl>

        </div>

七、在浏览器是查看效果。

〖遗留问题〗

1、  这个简单的自定义控件,继承Object类应该也能做。

2、WebControl类,已经具有了一些基本属性,如BackColorForeColorFont-NamesFont-Size等,需要进一步了解。
原文地址:https://www.cnblogs.com/WestGarden/p/3138373.html