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

2024-01-10 11:48

本文主要是介绍在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在下载。

 

 

这篇关于在VS2008中创建自定义控件(十一)添加在属性窗口中可折叠的属性(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590693

相关文章

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字