下载首页 | 资讯中心 | 下载分类 | 最近更新 | 排 行 榜 | 国产软件 | 国外软件 | 汉化补丁 |
文章搜索: 分类 关键字 收藏本站设为首页
您的位置:首页网页设计ASP程序 → 编写与.NET属性窗口交互的RAD组件(四)__教程
编写与.NET属性窗口交互的RAD组件(四)__教程
日期:2007-5-20 1:27:16 人气:103     [ ]
上一页 [1] [2] 下一页
 七、 编写和显示订制的类型
属性窗口中的编辑有如下三种工作方式:一,有些场合可以作为字符串来编辑,然后由TypeConverter来实现类型的转换。二,可以显示一个下拉列表来选择值。三,一个省略按钮提供其他的UI界面来编辑值,比如FileDialog和FontPicker。我们已经讲过了字符串形式,接着我们就来看下拉列表。

.NET framework已经包含了好几种下拉列表的例子,如Color,AccessibleRole,Dock等属性。我们从下图可以看到下拉列表的具体实现。




图4. 下拉列表编辑器

实现下拉的工作同样是由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;

}

}

}

当我们输入一个年龄的时候,我们可以看到左边的一个图形表示。




图5. 输入年龄





实现它并不困难。注意到赋给Grade类的EditorAttribute特性,它就是下面的这个类:

public class GradeEditor : UITypeEditor

{

public override bool GetPaintValueSupported(

ITypeDescriptorContext context)
出处:本站原创 作者:佚名
 阅读排行
01.精美qq空间横幅代码
02.最酷qq个性女生网名
03.最新又有免费QQ秀啦《..
04.巧用透明FlaSh扮靓你的..
05.花之神匠代码(最新代码..
06.最新QQ空间免费导航
07.最新免费个人形象设置..
08.最新qq空间flash代码m..
09.CSS技术结合图像实现动..
10.Photoshop光影魔术师:..
11.QQ音速种子狂刷
12.最新QQ空间透明代码
13.PS实例教程:教你制作结..
14.Photoshop光影魔术师:..
15.制作背景图__教程
16.用Photoshop制作漂亮的..
17.如何获得QQ音速种子
18.≤QQ空间代码≥在日志..
19.网页浮动广告的制作代..
20.用Photoshop制作大红灯..
21.常用CSS
22.Photoshop给靓丽美女打..
 推荐文章
·Photoshop 表现技法之..
·快速将你的相片矢量化..
·PHOTOSHOP制作炽热的太..
·用Photoshop制作美丽的..
·流行杀手的娃娃工厂__..
·打造8号台球__教程
·PHOTOSHOP制作待机MM图..
·用Photoshop帮MM做纹身..
·PHOTOSHOP美眉着色绝招..
·PHOTOSHOP花露的制作_..
·PHOTOSHOP渐变工具的巧..
·PHOTOSHOP手绘奥兰多-..
·高难度抠图两种方法__..
·Photoshop高尔夫球的制..
·Photoshop打造精美玉佩..
Eqxia_COM下载站 版权所有 Copyright© 2001-2005 Www.eqxia.COM, All Rights Reserved.