ASP.NET2.0自定义控件属性的写法

    技术2022-05-11  69

     

    你可注意VS中属性栏里有如下一些属性形式,红色标记部分:

    属性描述:

    一般属性:

    下拉列表属性:

    树状属性:

    那么它们是怎么简单地实现的呢?答案就在下面,

     1.属性描述

     属性描述包含在属性定义的开头,"[.....]"一段代码中.

    代码:

            [         Bindable( true ),  // 是否显示在属性栏中          Category( " Appearance " ),  // 属性的分类,Appearance表示将此属性显示在"外观"栏中          DefaultValue( "" ),  // 属性的默认值          Description( " 设置或获取BaseControl类型 " // 属性栏下方的描述         ]         public   virtual  ControlType Type         {               //属性的定义部分        }

    2.一般属性

    代码:

            [属性描述]         public   string  Title         {            get            {                object o = ViewState["Title"];                if (o == null)                    return String.Empty;                return (string)o;            }            set { ViewState["Title"= value; }        }

    如果只想让属性为只读的话,只需写get语句就行了.如果属性是只读的,它在属性栏中显示灰色.

    3.下拉列表属性

    此中属性要定义一个枚举类型. 

    代码:

         public   enum  ControlType     {        Label=0,        TextBox=1,        DatePicker=2    }      public   class  BaseControl : WebControl, INamingContainer     {        ......        [属性描述]        public virtual ControlType Type        {            get            {                object _type = ViewState["Type"];                if (_type == null)                    return ControlType.TextBox;                else                    return (ControlType)_type;            }            set            {                ViewState["Type"= value;            }        }                ......    }

     

    4.树状属性

    我们先给子属性定义的类. 

    代码:

         public   class  LabelTextBox : Control     {         private SizeInfo _size;        [Browsable(true),         Description("获取和设置控件的大小"),         DesignerSerializationVisibility(DesignerSerializationVisibility.Content),         NotifyParentProperty(true),         Category("Appearance")        ]        public virtual SizeInfo Size        {            get             {                if (_size == null)                    _size = new SizeInfo();                return _size;            }        }         ......    }     [TypeConverter( typeof (ExpandableObjectConverter))]     public   class  SizeInfo     {        private int _width;        private int _height;        [NotifyParentProperty(true)]        public int Width        {            get return _width; }            set { _width = value; }        }        [NotifyParentProperty(true)]        public int Height        {            get return _height; }            set { _height = value; }        }    }

    这里的属性用另外一种方式写的,建议还是用第一种方式写比较好.

    关于属性的定义写的不够全面,论述的不够深入,由于笔者学浅,请多多提出宝贵意见.


    最新回复(0)