在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

相关文章

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

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新建一个项