自定义控件(Task01)——可以设置属性的控件
源代码:13033480群共享
上面的自定义控件属性是不能设置的,一个链接控件,应该具有可以设置的最基本的链接属性HyperLink和显示的文本Text。
为了添加这两个属性,简单一点地做,我们的类需要继承自WebControl类。WebControl类已经是一个基本的控件类,它已经具备了一个控件最基本的结构,只是里面的内容还都是空的,我们要做的是,添加HyperLink和Text属性,设置控件的标记A,添加控件的属性href,添加要显示的文本Text。
一、在类中添加可设置的属性比较简单:
1、HyperLink属性
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;
}
}
}
2、Text属性
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()
}
五、HyperLink和Text属性,如果没有设置,控件需要有的默认的属性,这两个属性设置可以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类,已经具有了一些基本属性,如BackColor、ForeColor、Font-Names、Font-Size等,需要进一步了解。