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

 


本文目的:

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

 


 

 

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

图一

 

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

 

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

 

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

 

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

图二

 

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

图三

 

 

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

图四

 

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

图五

 

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

 

 

    在以上代码中,为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属性再添加一个特性,如以下代码所示。

 

 

    在以上代码中,关键代码是“[TypeConverter(typeof(ExpandableObjectConverter))]”,如果属性是一个类的话,可以直接使用ExpandableObjectConverter类来进行转换。

    生成解决方案后,可以在属性窗口看到PoetryAuthor属性成了一个可折叠的属性了。如下图所示。

 

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

原创不容易,转载请注明出处:http://hi.csdn.net/smallfools

相关链接:

  1. 在VS2008中创建自定义控件(一)创建网站项目和自定义控件项目
  2. 在VS2008中创建自定义控件(二)创建自定义控件并将其添加到工具箱中
  3. 在VS2008中创建自定义控件(三)在网页中添加自定义控件
  4. 在VS2008中创建自定义控件(四)为自定义控件添加默认值
  5. 在VS2008中创建自定义控件(五)修改tagprefix
  6. 在VS2008中创建自定义控件(六)创建完全自定义控件
  7. 在VS2008中创建自定义控件(七)自定义控件的中常用到的特性
  8. 在VS2008中创建自定义控件(八)输出HTML代码
  9. 在VS2008中创建自定义控件(九)添加属性
  10. 在VS2008中创建自定义控件(十)添加枚举型属性
  11. 在VS2008中创建自定义控件(十一)添加在属性窗口中可折叠的属性(一)
  12. 在VS2008中创建自定义控件(十二)添加在属性窗口中可折叠的属性(二)
  13. 在VS2008中创建自定义控件(十三)添加内镶属性
  14. 在VS2008中创建自定义控件(十四)内镶属性与内联属性的优先级
  15. 在VS2008中创建自定义控件(十五)创建控件时出错(未能对属性XXX设置XXX)的解决方法

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

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

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值