zoukankan      html  css  js  c++  java
  • 自定义控件(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等,需要进一步了解。
  • 相关阅读:
    MSSQl分布式查询
    欲善其事,必利其器 Librame Utility R1 实用工具包(.NET Framework 3.5)
    可复用的WPF或者Silverlight应用程序和组件设计(3)——控件级别
    Asp.Net 网站优化 数据库优化措施 使用主从库
    .NET独有的精巧泛型设计模式
    Javascript 使用 "大杂烩"
    淘宝下单高并发解决方案
    时间戳(timestamp)
    MSSQL锁机制
    maven开发过程实践
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211650.html
Copyright © 2011-2022 走看看