本文主要是介绍在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
相关链接:
- 在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在下载。
这篇关于在VS2008中创建自定义控件(十一)添加在属性窗口中可折叠的属性(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!