知识大全 编写与.NET属性窗口交互的RAD组件(三)

Posted 属性

篇首语:时人不识凌云木,直待凌云始道高。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 编写与.NET属性窗口交互的RAD组件(三)相关的知识,希望对你有一定的参考价值。

编写与.NET属性窗口交互的RAD组件(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   编写和显示订制的类型    属性窗口中的编辑有如下三种工作方式 一 有些场合可以作为字符串来编辑 然后由TypeConverter来实现类型的转换 二 可以显示一个下拉列表来选择值 三 一个省略按钮提供其他的UI界面来编辑值 比如FileDialog和FontPicker 我们已经讲过了字符串形式 接着我们就来看下拉列表      NET framework已经包含了好几种下拉列表的例子 如Color AccessibleRole Dock等属性 我们从下图可以看到下拉列表的具体实现      图 下拉列表编辑器    实现下拉的工作同样是由TypeConverter来定义 如果看TypeConverter的说明 可以看到有三个虚函数来实现这个功能 GetStandardValuesSupported() GetStandardValues()和GetStandardValuesExclusive() 重载这些方法 我们可以为属性提供预先定义好的值列表 实际上 是TypeConverter实现了下拉列表中的枚举值 属性窗口自己本身并没有代码来处理这种下拉列表的编辑 而仅仅是使用TypeConverter的方法     举个例来说 我们有一个包含Relation属性的FamilyMember组件 允许用户选择与其他人之间的关系 如果要使设计时界面更友好的话 属性窗口应该使用下拉列表来提供一些常用值的选择 如mother father daughter和sister等 除了提供的常用值之外 组件使用者也可以输入其他的表示关系的字符串值     public class FamilyMember : Component        private string relation = Unknown ;    [TypeConverter(typeof(RelationConverter)) Category( Details )]    public string Relation        get return relation;    set this relation = value;            internal class RelationConverter : StringConverter        private static StandardValuesCollection defaultRelations =    new StandardValuesCollection(    new string[] Mother Father Sister      Brother Daughter Son      Aunt Uncle Cousin );    public override bool GetStandardValuesSupported(    ITypeDescriptorContext context)        return true;        public override bool GetStandardValuesExclusive(    ITypeDescriptorContext context)        // returning false here means the property will    // have a drop down and a value that can be manually    // entered     return false;        public override StandardValuesCollection GetStandardValues(    ITypeDescriptorContext context)        return defaultRelations;            不过如何做一个更加定制化的UI呢?我们可以使用UITypeEditor类 UITypeEditor类包括了在显示属性或者是编辑属性(比如下拉列表和省略按钮)时可以由属性窗口调用的方法     一些类似于Image Color Font Name的属性类型会在属性值的左边有一个小的图形化表示 这是通过重载UITypeEditor的PaintValue方法实现的 当属性窗口得到定义了编辑器的属性值的时候 它就提供给编辑器一个矩形框对象(Rectangle)和画图的对象(Graphic) 他们都包含在PaintValue方法的事件参数PaintValueEventArgs中 举个例子来说 我们有一个Grade类需要有图形化的表示 下面就是我们的Grade类     [Editor(typeof(GradeEditor) typeof(System Drawing Design UITypeEditor))]    [TypeConverter(typeof(GradeConverter))]    public struct Grade        private int grade;    public Grade(int grade)        this grade = grade;        public int Value        get        return grade;                当我们输入一个年龄的时候 我们可以看到左边的一个图形表示     图 输入年龄    实现它并不困难 注意到赋给Grade类的EditorAttribute特性 它就是下面的这个类     public class GradeEditor : UITypeEditor        public override bool GetPaintValueSupported(    ITypeDescriptorContext context)        // let the property browser know we d like    // to do custom painting     return true;        public override void PaintValue(PaintValueEventArgs pe)        // choose the right bitmap based on the value    string bmpName = null;    Grade g = (Grade)pe Value;    if (g Value > )        bmpName = best bmp ;        else if (g Value > )        bmpName = ok bmp ;        else        bmpName = bad bmp ;        // draw that bitmap onto the surface provided     Bitmap b = new Bitmap(typeof(GradeEditor) bmpName);    pe Graphics DrawImage(b pe Bounds);    b Dispose();            像我们上面提到的 UITypeEditor可以实现属性的下拉选择和弹出对话框选择 后面的例子会包括这样的代码 如果想知道进一步的信息的话 就要参考UITypeEditor GetEditStyle和UITypeEditor EditValue方法以及IWindowsFormsEditorService接口 cha138/Article/program/net/201311/11959

相关参考

知识大全 编写与.NET属性窗口交互的RAD组件(二)

编写与.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)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 使用ADO.NET2.0提升数据交互性能(2)

使用ADO.NET2.0提升数据交互性能(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!三异步

知识大全 通过实例看VCL组件开发全过程(三)

通过实例看VCL组件开发全过程(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 四组件属性编辑

知识大全 自己动手编写组件

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