我们开发出来的控件一般都需要跟使用控件的人编程人员交互,其中交互有两个途径:一个是属性还有就是事件。属性可能是简单的类型如:int、string等并不太复杂的类型,也有比较复杂的类型如:集合。
一、属性实现交互
我们还是沿用上面的例子来添加属性 PicShow示例:
public class PicShow : Control
{
private string _imgUrl;
//属性
public virtual string ImgUrl
{
get
{
return this._imgUrl;
}
set
{
this._imgUrl = value;
}
}protected override void Render(HtmlTextWriter writer)
{
writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100px");
writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100px");
writer.RenderBeginTag(HtmlTextWriterTag.Div);
//Create Img Tag
writer.AddAttribute(HtmlTextWriterAttribute.Src, this.ImgUrl);
writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "80px");
writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "80px");
writer.RenderBeginTag(HtmlTextWriterTag.Img);
writer.RenderEndTag();
//End Of Div
writer.RenderEndTag();
}
}
上面的示例就是改变了上次的控件只能指定死了图片,这样图片的地址就可以由控件的使用人员自己去指定了。控件中定义了一个私有字段,通过属性ImgUrl来设置其值,因为我们允许重写其属性,所以定义成了virtual类型的。这里的属性定义跟一般类的定义是一样的,就不多做说明。
二、视图状态
底下我们在一个项目中应用此控件,但我们发现,这样的控件的属性的状态是没法维持的。也就是说,它永远只能维持我们初始给它的值。
举个例子:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ControlSatePic.aspx.cs"
Inherits="ControlSatePic" %>
<%@ Register Assembly="HenllyeeConrol" Namespace="MyConrol1" TagPrefix="cc1" %>
http://www.w3.
org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
我们通过按钮来改变其属性:
protected void btnChange_Click(object sender, EventArgs e)
{
if (this.psDemo.ImgUrl == "Images/1109508867.jpg?http://www.xvna.com")
this.psDemo.ImgUrl = "Images/bg.jpg?http://www.xvna.com";
else
this.psDemo.ImgUrl = "Images/1109508867.jpg?http://www.xvna.com";
}