Asp.net中复合控件的一些学习心得
在.net 2.0中有System.Web.UI.WebControls.CompositeControl,使得编写的复合控件在使用时有更友好的界面
以前在做复合控件时最常见的是以下代码
重点是这一句public class LabelTextBox :WebControl, INamingContainer
继承了WebControl类和实现ImamingContainer了接口
但是这样做成的复合控件在使用时设计界面很不友好,在2.0中新增了一个System.Web.UI.WebControls.CompositeControl
这样在作用控件的时候就不会有设计的障碍了,代码如下
这是这样了,大家可以试试
以前在做复合控件时最常见的是以下代码
public class LabelTextBox :WebControl, INamingContainer
{
public string Text {
get {
object o = ViewState["Text"];
if (o == null)
return String.Empty;
return (string) o;
}
set { ViewState["Text"] = value; }
}
public string Title {
get {
object o = ViewState["Title"];
if (o == null)
return String.Empty;
return (string) o;
}
set { ViewState["Title"] = value; }
}
protected override void CreateChildControls()
{
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
protected virtual void CreateControlHierarchy()
{
TextBox t = new TextBox();
Label l = new Label();
t.Text = Text;
l.Text = Title;
Controls.Add(l);
Controls.Add(t);
}
}
{
public string Text {
get {
object o = ViewState["Text"];
if (o == null)
return String.Empty;
return (string) o;
}
set { ViewState["Text"] = value; }
}
public string Title {
get {
object o = ViewState["Title"];
if (o == null)
return String.Empty;
return (string) o;
}
set { ViewState["Title"] = value; }
}
protected override void CreateChildControls()
{
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
protected virtual void CreateControlHierarchy()
{
TextBox t = new TextBox();
Label l = new Label();
t.Text = Text;
l.Text = Title;
Controls.Add(l);
Controls.Add(t);
}
}
重点是这一句public class LabelTextBox :WebControl, INamingContainer
继承了WebControl类和实现ImamingContainer了接口
但是这样做成的复合控件在使用时设计界面很不友好,在2.0中新增了一个System.Web.UI.WebControls.CompositeControl
这样在作用控件的时候就不会有设计的障碍了,代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CompositeControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:LabelTextBox runat=server></{0}:LabelTextBox>")]
public class LabelTextBox : System.Web.UI.WebControls.CompositeControl
{
public string Text
{
get
{
object o = ViewState["Text"];
if (o == null)
return String.Empty;
return (string)o;
}
set
{
ViewState["Text"] = value;
}
}
public string Title11
{
get
{
object o = ViewState["Title"];
if (o == null)
return String.Empty;
return (string)o;
}
set
{
ViewState["Title"] = value;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
protected virtual void CreateControlHierarchy()
{
TextBox t = new TextBox();
Label l = new Label();
t.Text = Text;
l.Text = Title11;
Controls.Add(l);
Controls.Add(t);
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CompositeControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:LabelTextBox runat=server></{0}:LabelTextBox>")]
public class LabelTextBox : System.Web.UI.WebControls.CompositeControl
{
public string Text
{
get
{
object o = ViewState["Text"];
if (o == null)
return String.Empty;
return (string)o;
}
set
{
ViewState["Text"] = value;
}
}
public string Title11
{
get
{
object o = ViewState["Title"];
if (o == null)
return String.Empty;
return (string)o;
}
set
{
ViewState["Title"] = value;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
CreateControlHierarchy();
ClearChildViewState();
}
protected virtual void CreateControlHierarchy()
{
TextBox t = new TextBox();
Label l = new Label();
t.Text = Text;
l.Text = Title11;
Controls.Add(l);
Controls.Add(t);
}
}
}
这是这样了,大家可以试试