你可注意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; } } }
这里的属性用另外一种方式写的,建议还是用第一种方式写比较好.
关于属性的定义写的不够全面,论述的不够深入,由于笔者学浅,请多多提出宝贵意见.