向属性窗口提供标准值列表的类型转换器
类型转换器可以为Visual Studio 2005的属性窗口中的属性值输入字段,提供一个标准值列表,那么当在属性浏览器中选中了与该类型转换器关联的类型属性时,值输入字段将包含一个按钮,该按钮显示属性类型的标准值下拉列表,可从中选择标准值。
实现在属性窗口中提供标准值下拉列表的类型转换器有以下6个步骤:
(1)定义从System.ComponentModel.TypeConverter派生的类;
(2)重写GetStandardValuesSupported方法并返回true;
(3)重写GetStandardValues方法并返回包含属性类型标准值的StandardValuesCollection。属性类型的标准值必须是类型字符串;
(4)重写CanConvertFrom方法并为类型字符串的sourceType参数值返回true;
(5)重写ConvertFrom方法并基于"值"参数返回相应的属性值;
(6)将指示类型转换器类型的TypeConverterAttribute应用于要为其提供一组标准值的类型。
限于篇幅,本文将不再列举代码示例。关于实现过程中的方法应用,读者可参考前文相关内容或者MSDN。
4. 在运行时为属性初始化生成代码的类型转换器
.NET框架中提供了在设计时生成可动态配置的属性初始化代码(此代码在运行时初始化属性)的功能。开发人员可以构建一个产生基于构造函数的初始化代码的类型转换器。为了在运行时配置类型属性,这些类型转换器可以使用在设计时设置的值来动态生成构造函数代码。类型转换器实现逻辑以配置属性的类型和构造函数的值。
为了初始化属性,除了生成构造函数之外,如果您还需要生成代码,可以实现一个自定义的CodeDomSerializer,并应用将类型的CodeDomSerializer与该类型关联的 DesignerSerializerAttribute,这样就可以动态地生成代码。通常只有在对组件初始化的代码生成进行动态控制或自定义很重要的情况下,才使用这种方法。要生成自定义的基于构造函数的属性初始化
程序,必须将类型转换器与属性的类型关联来进行初始化,而且该类型转换器必须能够转换到InstanceDescriptor。
实现生成基于构造函数的属性初始化代码的类型转换器有3个步骤:
(1)定义从System.ComponentModel.TypeConverter派生的类;
(2)重写CanConvertTo方法。如果destinationType 参数等于InstanceDescriptor类型,返回true;
(3)重写ConvertTo方法。如果destinationType参数等于InstanceDescriptor 类型,构造并返回一个InstanceDescriptor,表示要为之生成代码的构造函数和构造函数参数。要创建表示相应构造函数及参数的InstanceDescriptor,可通过使用您所查找的构造函数的相应方法签名来调用GetConstructor或GetConstructors方法,从要初始化的属性的Type中获取ConstructorInfo。然后创建一个新的实例说明符,并为表示待用构造函数类型的类型传递ConstructorInfo,同时传递与构造函数签名匹配的参数对象数组;
5. 小结
本文主要介绍了类型转换器的基本概念以及3种类型转换器的实现方法。尤其需要读者关注的是其中的值翻译的类型转换器,这是作为开发人员应重点掌握的内容。
查看本文来源