知识大全 编写与.NET属性窗口交互的RAD组件(二)
Posted 属性
篇首语:记忆的坐标有多么清晰,前进的脚步就有多么坚定。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 编写与.NET属性窗口交互的RAD组件(二)相关的知识,希望对你有一定的参考价值。
编写与.NET属性窗口交互的RAD组件(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
扩展属性和字符串转换 TypeConverter和属性窗口 NET属性窗口最重要的一个特性就是可以显示嵌套的属性 这样就提供了比属性类别更加细化和更有逻辑的分类 嵌套属性对于类目显示和排序显示都是适用的 这样可以让属性列表更加紧凑 比如我们用带有子属性X和Y的一个Location属性来代替Top和Left两个属性就更加合理 图 嵌套属性 不过 如何来决定一个属性可以展开呢?这些不是由属性窗口来决定 而是取决于属性自己的类型 在 NET framework中 每一种类型都是和一个TypeConverter联系在一起的 比如Boolean和string的TypeConverter就不会允许展开 因为让boolean类型含有子属性是没有意义的 在 NET framework中 TypeConverter实际上是执行了不少的方法 在属性窗口中就更多了 正像他的名字所说明的那样 TypeConverter提供了一种动态的从一种类型改变到另一种类型的标准方式 事实上 属性窗口只和string打交道 所以他就依赖于TypeConverter来进行类型之间的转换(主要是和string类型的转换) TypeConverter同样是可以提供扩展性能以及复杂类型来和属性窗口交互 比如 看下面这个Person类 [TypeConverter(typeof(PersonConverter))] public class Person private string firstName = ; private string lastName = ; private intage = ; public int Age get return age; set age = value; public string FirstName get return firstName; set this firstName = value; public string LastName get return lastName; set this lastName = value; 我们注意到Person类被指定了TypeConverterAttribute特性 TypeConverterAttribute特性还指定了这个类的类型转换器(PersonConverter) 如果没有指定TypeConverterAttribute特性 默认使用TypeConverter类 对于一些简单数据类型 比如Font Point等 TypeConverter可以很好地工作 但如果数据类型比较复杂 那么它对类型是转换可能就不是我们希望的那样 因此 我们有必要从TypeConverter派生自己的类型转换器 在这里就是PersonConverter 本例中 我们首先重载了GetPropertiesSupported和GetProperties方法来决定属性是否可以展开 internal class PersonConverter : TypeConverter public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context object value Attribute[] filter) return TypeDescriptor GetProperties(value filter); public override bool GetPropertiesSupported( ITypeDescriptorContext context) return true; 在通常情况下 直接使用TpyeConverter进行转换已经足够了 简单的扩展就是从TypeConverter直接派生你所要的类型转换器 更复杂的扩展就需要从ExpandableObjectConverter派生类型转换器了 现在我们修改PersonConverter来转换一个Person类并且显示一个字符串 internal class PersonConverter : ExpandableObjectConverter public override bool CanConvertFrom( ITypeDescriptorContext context Type t) if (t == typeof(string)) return true; return base CanConvertFrom(context t); public override object ConvertFrom( ITypeDescriptorContext context CultureInfo info object value) if (value is string) try string s = (string) value; // parse the format Last First (Age) // int ma = s IndexOf( ); if (ma != ) // now that we have the ma get // the last name string last = s Substring( ma); int paren = s LastIndexOf( ( ); if (paren != && s LastIndexOf( ) ) == s Length ) // pick up the first name string first = s Substring(ma + paren ma ); // get the age int age = Int Parse( s Substring(paren + s Length paren )); Person p = new Person(); p Age = age; p LastName = last Trim(); p FirstName = first Trim(); return p; catch // if we got this far plain that we // couldn t parse the string // throw new ArgumentException( Can not convert + (string)value + to type Person ); return base ConvertFrom(context info value); public override object ConvertTo( ITypeDescriptorContext context CultureInfo culture object value Type destType) if (destType == typeof(string) && value is Person) Person p = (Person)value; // simply build the string as Last First (Age) return p LastName + + p FirstName + ( + p Age ToString() + ) ; return base ConvertTo(context culture value destType); 现在看看我们的Person属性在指定了PersonConverter类型转换器之后 既可以展开 又可以通过两种方式来操作了 直接修改和使用子属性 图 实现展开的TypeConverter 要使用上面的代码 我们就生成一个UserControl并且写下如下的代码 private Person p = new Person(); public Person Person get return p; set this p = value; cha138/Article/program/net/201311/12805相关参考
编写与.NET属性窗口交互的RAD组件(四) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 提供
知识大全 ASP.NET入门教程 1.7.8 属性窗口[2]
ASP.NET入门教程1.7.8属性窗口[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
知识大全 ASP.NET入门教程 1.7.8 属性窗口[1]
ASP.NET入门教程1.7.8属性窗口[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
JavaScript实际应用:子窗口和父窗口交互 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
两个属性引起的歧异property和attribute的区别这虽然没有一个馒头引发的血案那么严重但是也足以成为net程序员的技术盲点之二 对于property和attribute这两个名词都叫属
ASP讲座之十:自己动手编写组件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一组件编写速成—
知识大全 RAD Studio 2009通过Mono提供.NET应用跨平台开发
RADStudio2009通过Mono提供.NET应用跨平台开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
知识大全 asp.net中的validaterequest属性与安全性
不知道大家之前有没有注意到这个属性这里我们来一起讨论一下这个属性的作用以及我们以后到底该怎样使用它! 我们先来了解一下这个属性:(注:本属性中是新增的!) 它所在的命名空间:SystemWeb
KeyDown(按键)用于响应键盘中首次按下的键 KeyDown事件同样可以在如图所示的Form属性窗口中找到双击该项为其编写事件响应如下 privatevoidForm_KeyDown(ob
MouseHover(鼠标悬停)事件发生于鼠标悬停在窗体控件上一段时间之后 同样在如图所示的Form属性窗口找到MouseHover事件项双击该项进入该事件代码编辑文件Formcs并对其编写事件