meiwn

导航

Asp.net中复合控件的一些学习心得

在.net 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 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);
        }

    }
}


这是这样了,大家可以试试

posted on 2006-10-05 15:49  努力学习.NET  阅读(535)  评论(0编辑  收藏  举报