您的位置:首页 > Web前端 > HTML

在VS2008中创建自定义控件(十一)添加在属性窗口中可折叠的属性(一)

2010-06-03 17:51 351 查看
 

本文目的:

创建一个在属性窗口中可折叠的属性

 

 

 

    什么是在属性窗口中可折叠的属性?废话少说,先上图,看看图一马上就明白了。



图一
 

    在大多数服务器控件的属性窗口中可以看到如上图所示的Font属性,这个属性是用于设置控件中文字的字体。由于文字字体包括是否加粗、是否斜体、使用什么字体、字体大小是多少等内容,因此,可以把这个内容以子属性的方式放在Font属性下,而这个Font属性就是一个在属性窗口中可折叠的属性。

 

    我们接着《在VS2008中创建自定义控件(九)添加属性》来,现在我们要添加一个唐诗作者的属性,由于古人除了姓名之外,还有字、号,所以,我们设计唐诗作者这个属性要包含三个子属性:姓名、字、号——明眼人一看就明白了,“作者”这个属性就是一个类,因此,我们先创建一下作者类,如下所示。

/// <summary>
/// 作者类
/// </summary>
public class Author
{
//姓名
private string _name = null;
//字
private string _courtesyName = null;
//号
private string _selfTitled = null;
/// <summary>
/// 姓名
/// </summary>
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}

/// <summary>
/// 字
/// </summary>
public string CourtesyName
{
get
{
return _courtesyName;
}
set
{
_courtesyName = value;
}
}

/// <summary>
/// 号
/// </summary>
public string SelfTitled
{
get
{
return _selfTitled;
}
set
{
_selfTitled = value;
}
}


 

    创建了一个“作者”类之后,为唐诗类添加一个作者属性,该属性就是刚才创建的类,如以下代码所示。

private Author _author = new Author();
/// <summary>
/// 唐诗的作者
/// </summary>
[Category("Data")]              //放到“数据”分组中
[Browsable(true)]               //该项属性是否会显示在控件的“属性”窗口中
[Description("诗的作者")]       //属性的说明
public Author PoetryAuthor
{
get
{
return _author;
}
set
{
_author = value;
}
}


 

    添加完“作者”属性之后,我们在自定义控件的属性窗口中可以看到PoetryAuthor属性选项,如下图所示。



图二
 
    切换到aspx文件的源代码页,我们也可以看到在源代码页中看到PoetryAuthor属性,如下图所示。



图三
 
 
    值得说明的是,由于“姓名”、“字”、“号”属性都是“作者”类下的属性,而作者是唐诗属性,所以,在源代码页中是不存在name、CourtesyName、SelfTitled属性的,如下图所示。



图四
 
    因为“姓名”、“字”和“号”属性是“作者”的属性,所以可以在cs页面中设置该属性,如下图所示。



图五
 
    那么,要怎么才能在aspx页面的源代码中设置“姓名”、“字”和“号”属性呢?这个时候,我们就要在“作者”属性上添加一个特性了,如以下代码所示。
 

/// <summary>
/// 唐诗的作者
/// </summary>
[Category("Data")]              //放到“数据”分组中
[Browsable(true)]               //该项属性是否会显示在控件的“属性”窗口中
[Description("诗的作者")]       //属性的说明
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Author PoetryAuthor
{
get
{
return _author;
}
set
{
_author = value;
}
}


 

    在以上代码中,为PoetryAuthor属性加上了一个DesignerSerializationVisibility特性,该特性主要作用是说明该项控件的属性是否在网页的源代码中显示。DesignerSerializationVisibility()方法的参数有以下三种:

    1、DesignerSerializationVisibility.Hidden:该参数说明在代码生成器中不生成属性代码。如果在PoetryAuthor属性的特性中设为该值,而在aspx的源文件中将看不到PoetryAuthor属性,也就是在图三中看不到PoetryAuthor选项。

    2、DesignerSerializationVisibility.Visible:该参数说明在代码生成器中生成属性代码。

    3、DesignerSerializationVisibility.Content:该参数说明在代码生成器中产生的是属性内容的代码,而不是属性本身的代码。

 

    在本例中,我们使用的第三种参数,让代码生成器中产生属性内容的代码。由于PoetryAuthor属性是一个类,所以,VS会显示这个类中的属性,并使用“-”对它们进行连接。如下图所下。



图六
 
    需要注意的是,DesignerSerializationVisibility.Content特性只影响aspx源代码中的代码生成器中显示的属性,而不会影响该类的属性。换句话而言,上图中的PoetryAuthor-CourtesyName、PoetryAuthor-Name和PoetryAuthor-SelfTitled属性是不存在的,只是PoetryAuthor属性下三个子属性的表示方式而已。因此,在cs文件中,对PoetryAuthor属性的设置还是如图五所示。
 
    然而,在经过上一步之后,我们只是让自定义控件在源代码中支持类的属性的设置了,但是在属性窗口,PoetryAuthor属性还是没有达到可折叠的效果。
    为什么会没有可折叠的效果呢?这里就要先介绍一下属性窗口中的“类型”了。
    我们为控件定义的每个属性都是有一个“类型”的,例如前面定义的唐诗的内容、标题属性,它的类型都是字符串型(string);唐诗分类是枚举型等,当然,还有我们常用到的整型、日期型、color型等。VS的属性窗口会自动对这些类型进行识别。如果我们设置的属性值与属性类型不相符,那么VS将会报错。而在为属性赋值时,如果类型不同话,可以使用类型转换器将类型转换成相同之后再进行赋值。
    例如,你将颜色设为红色的话,就必须先要将“red”这个字符串转换成Color类型,再赋值给颜色属性。
    之所以在属性窗口中PoetryAuthor属性没有显示出折叠效果,这是因为,PoetryAuthor属性是一个类,而“类”并不是属性窗口中可以默认知道的类型。因此,我们还要对PoetryAuthor属性的类型进行转换,这个时候,我们就要为PoetryAuthor属性再添加一个特性,如以下代码所示。
/// <summary>
/// 唐诗的作者
/// </summary>
[Category("Data")]              //放到“数据”分组中
[Browsable(true)]               //该项属性是否会显示在控件的“属性”窗口中
[Description("诗的作者")]       //属性的说明
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[TypeConverter(typeof(ExpandableObjectConverter))]
public Author PoetryAuthor
{
get
{
return _author;
}
set
{
_author = value;
}
}
 
 
    在以上代码中,关键代码是“[TypeConverter(typeof(ExpandableObjectConverter))]”,如果属性是一个类的话,可以直接使用ExpandableObjectConverter类来进行转换。
    生成解决方案后,可以在属性窗口看到PoetryAuthor属性成了一个可折叠的属性了。如下图所示。



 

===================================================================

原创不容易,转载请注明出处:http://hi.csdn.net/smallfools
相关链接:
在VS2008中创建自定义控件(一)创建网站项目和自定义控件项目

在VS2008中创建自定义控件(二)创建自定义控件并将其添加到工具箱中

在VS2008中创建自定义控件(三)在网页中添加自定义控件

在VS2008中创建自定义控件(四)为自定义控件添加默认值

在VS2008中创建自定义控件(五)修改tagprefix

在VS2008中创建自定义控件(六)创建完全自定义控件

在VS2008中创建自定义控件(七)自定义控件的中常用到的特性

在VS2008中创建自定义控件(八)输出HTML代码

在VS2008中创建自定义控件(九)添加属性

在VS2008中创建自定义控件(十)添加枚举型属性

在VS2008中创建自定义控件(十一)添加在属性窗口中可折叠的属性(一)

在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)

在VS2008中创建自定义控件(十三)添加内镶属性

在VS2008中创建自定义控件(十四)内镶属性与内联属性的优先级

在VS2008中创建自定义控件(十五)创建控件时出错(未能对属性XXX设置XXX)的解决方法

===================================================================

    本文源代码可以http://download.csdn.net/source/3265963在下载。

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐