• 自定义控件(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等,需要进一步了解。
  • 相关阅读:
    calendar.getTimeInMillis() 和 System.currentTimeMillis() 的区别
    微信小程序中使用 <web-view> 内嵌 H5 时,登录问题的处理方法
    小程序 TabBar 定制
    webpack 代码优化压缩方法
    react-router v4 按需加载的配置方法
    axios发送post请求,如何提交表单数据?
    react中键盘enter事件处理
    常用证件正则表达式
    react中input自动聚焦问题
    React Router v4 页面传值的三种方法
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211650.html
Copyright © 2020-2023  润新知