今天你写控件了吗?----ASP.net控件开发系列(五)
2005-05-23 08:58
507 查看
TypeConverter
在本系列的上篇文章中,和大家控讨了控件开发与propertyGrid的关系,不知现在大家现在对propertygrid有没有一个较全面的了解,也不知大家有没有做个工程,把propertyGrid拉进去鼓捣鼓捣?“另起炉灶”
现在我们来思考一个问题:假于,propertygrid没有把属性和事件分成两个分页来显示,会产生什么效果?
那还用说,太乱了。
那如果你设计的控件有很多的属性,而一些关联性很强,或都是操作一个方面的,那么我们可以把它们分门别类,摆到一起,怎么做呢?
我们可以给这个控件类指定以下Attribute:
[PropertyTab(typeof(YourPropertyTab), PropertyTabScope.Component)]
public class YourControlClass
其中,前面一个参数指定处理PropertyTab的类,后一个参数说明要应用在什么时候,Component为当前组件专用,Document当前文档专用,Global只能由父给件显式去除,Static不能去除。
internal class YourPropertyTab : PropertyTab
类型转换器
在上一篇文章中,我们已经接触了TypeConverter,现在我们全面的来看看这个Interpreter:1、TypeConverter从System.ComponentModel.TypeConverter类派生。
2、用使用[TypeConverter(typeof(YourTypeConverter))]绑定到属性。
3、在设计期和运行期都要用到TypeConverter,因为,两个时期都有特定类型-String之间的转换。
4、功能一:把属性转换成字符串显示在属性浏览器,把属性浏览器的设的值转换成属性需要的类型。
5、功能二:为子属性提供一个展开/折叠的UI。如下图:
要实现这个功能非常之简单,你先让属性通过TypeConverterAttribute关联到转换器类System.ComponentModel.ExpandableObjectConverter,或者继承自这个类的转换器。
public class YourControl
6、为属性提供一个设计期值的下拉列表,正如我上篇文章所述。
7、System.Web.UI.WebControls namespace & System.ComponentModel namespace下已经有了这些转换器:UnitConverter,BooleanConverter,CharConverter,EnumConverter,CollectionConverter,ArrayConverter,BaseNumberConverter,ByteConverter,ReferenceConverter,CultureInfoCOnverter,DateTimeConverter,DecimalConverter,DoubleConverter,ExpandableObjectConverter,GuidConverter,Int16(32/64)Converter,sByteConverter,SingleConverter,StringConverter,TimeSpanConverter,TypeListConverter,UInt16(32/64)Converter,ObjectConverter,PropertyConverter,DataBindingCollectionConverter,DataFieldConverter,DataMemberConverter,DataSourceConverter,FontNamesConverter,FontUnitConverter,TargetConverter,ValidatedControlConverter,CursorConverter......(WinForm的我就不列出来了)
下面,我们就重点来看看如何实现不同类型和String怎么样来转换。
下面这个实例应该就得达到这个目的。
大家看到在上面的代码中我们老是在override方法中最后调用基类的方法,这么做是省去实现转换失败时的返回等逻辑的实现,避免出现莫名其妙的错误。
现在,我们回过头来看看上面的那张图,我们使用了继承自ExpandableObjectConverter的转换器,而且,我们可以看到,我们既可以分开来为属性的子属性赋值,也可以总的为属性赋值,如图中所示,"100,50,50"这个字符串值发映的就是被TypeConverter转换了的值,在需要的时候,TypeConverter也会将它转换为YourType.Property_1= 100,YouType.Property2=50......这样的实际类型的实例及赋予它正确的值。
相关文章推荐
- 今天你写控件了吗?----ASP.net控件开发系列
- 今天你写控件了吗?----ASP.net控件开发系列之(一)开篇
- 今天你写控件了吗?----ASP.net控件开发系列(七)
- 今天你写控件了吗?----ASP.net控件开发系列之(二)
- 今天你写控件了吗?----ASP.net控件开发系列(三)
- 今天你写控件了吗?----ASP.net控件开发系列(四)
- 今天你写控件了吗?----ASP.net控件开发系列(六)
- 今天你写控件了吗?----ASP.net控件开发系列(八)
- asp.net 控件开发系列
- asp.net控件开发系列(四)
- asp.net控件开发系列(八)
- ASP.net控件开发系列(四)
- asp.net控件开发基础系列
- ASP.NET 控件开发系列之图片切换web控件
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(5)事件和数据回发机制】★★★
- [ASP.NET开发系列]在用户控件中添加属性 -- 摘自 tigerwen01
- asp.net控件开发基础系列
- asp.net控件开发系列(九)
- (一)庖丁解牛Asp.net3.5控件和组件开发技术系列—服务器控件开发中的调试技术-郑健
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—教程索引】★★★