快速业务通道

ASP.net控件开发系列之五

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
}
  }
  public override bool IsReadOnly {get{return false;}}
  public override object GetValue(object o) //和关联对象的什么属性相关
  {
   return ((YourControlType)o).Proterty_1;
  }
  public override void SetValue(object o, object value) //和关联对象的什么属性相关
  {
   YourControlType uc = o as YourControlType;
   uc.Property_1 = (int)value;
  }
  public override void ResetValue(object o){}//望文生义
  public override bool CanResetValue(object o) //望文生义
  {
   return false;
  }
  /**////Does this property participate in code generation?
  public override bool ShouldSerializeValue(object o)
  {
   return false;
  }
  }
}

类型转换器

在上一篇文章中,我们已经接触了TypeConverter,现在我们全面的来看看这个Interpreter:

1、TypeConverter从System.ComponentModel.TypeConverter类派生。

2、用使用[TypeConverter(typeof(YourTypeConverter))]绑定到属性。

3、在设计期和运行期都要用到TypeConverter,因为,两个时期都有特定类型-String之间的转换。

4、功能一:把属性转换成字符串显示在属性浏览器,把属性浏览器的设的值转换成属性需要的类型。

5、功能二:为子属性提供一个展开/折叠的UI。如下图:

要实现这个功能非常之简单,你先让属性通过TypeConverterAttribute关联到转换器类System.ComponentModel.ExpandableObjectConverter,或者继承自这个类的转换器。

public class YourConverter : ExpandableObjectConverter {
do something,example: override CovertTo function
   }
public class YourControl
{
[TypeConverter(typeof(YourConverter))]
public YourPropertyClass ExpandableProperty
{
  .
}
}

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怎么样来转换。

下面这个实例应该就得达到这个目的。

  public class YourTypeConverter : TypeConverter {//类型转换器需直接或间接继承自TypeConverter类,
    //上面例子继承自ExpandableObjectConverter也是间接继承TypeConverter类
     public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {//源类型能不能转换成转换器关联类型
       if (sourceType == typeof(string)) {
         return true;
       }
       return base.CanConvertFrom(context, sourceType);//我们实现了和String的转换,所以为String的话为True,然后,简单调用基类的方法就行。
     }
     public override bool CanConvertTo(ITypeDescriptor

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号