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

 

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

属性描述:ASP.NET2.0自定义控件属性的写法_第1张图片

一般属性:ASP.NET2.0自定义控件属性的写法_第2张图片

下拉列表属性:ASP.NET2.0自定义控件属性的写法_第3张图片

树状属性:ASP.NET2.0自定义控件属性的写法_第4张图片

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

 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; }
        }

    }

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

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

你可能感兴趣的:(ASP.NET2.0,asp.net,textbox,class,object,null,string)