下载首页 | 资讯中心 | 下载分类 | 最近更新 | 排 行 榜 | 国产软件 | 国外软件 | 汉化补丁 |
文章搜索: 分类 关键字 收藏本站设为首页
您的位置:首页网页设计ASP程序 → 编写与.NET属性窗口交互的RAD组件(二)__教程
编写与.NET属性窗口交互的RAD组件(二)__教程
日期:2007-5-20 1:27:13 人气:118     [ ]
上一页 [1] [2] 下一页
 五、 基础知识:使用Attribute来订制属性窗口的显示
控制显示的机制和用IDL定义的组件是一样的,不过是增加了元数据特性。控制显示使用最普遍的特性是BrowsableAttribute。默认状态下,属性窗口显示对象中定义的所有的公开的、可读的(即public、有get或者set方法的)属性,并且把他们放在“杂项(Misc)”类别中。下面是一个简单的组件例子:

public class SimpleComponent : System.ComponentModel.Component

{

private string data = "(none)";

private bool dataValid = false;








public string Data

{

get

{

return data;

}

set

{

if (value != data)

{

dataValid = true;

data = value;

}

}

}

public bool IsDataValid

{

get

{

// perform some check on the data

//

return dataValid;

}

}

}


下图是这个例子在属性窗口中的显示:












图1.显示在属性窗口中的简单组件

在这个例子中,SimpleComponent有两个属性:Data和IsDataValid。实际上,由于IsDataValid是只读的,因此显示在这里并没有多大意义,设计人员在设计状态没有必要知道这个属性的值。因此,我们给他加上BrowsableAttribute特性让属性窗口不显示他。

[Browsable(false)]

public bool IsDataValid

{

get

{

// perform some check on the data

//

return dataValid;

}

}


编译器会自动在特性类名后添加“Attribute”字符,因此我们可以在代码中省略掉他。当然,输入“[BrowsableAttribute(false)]”是一样的效果。对于那些没有指定特性的属性或者类,编译器都使用默认特性和默认特性值加以描述。在这个例子中,BrowsableAttribute的默认值为true。这个原则对于Visual Basic .NET同样是一致的。两者唯一的区别就是Visual Basic .NET使用尖括号(‘<’和‘>’)来标记特性,而不是在C#中使用的中括号(‘[’和‘]’)。


编译器会自动在特性类名后添加“Attribute”字符,因此我们可以在代码中省略掉他。当然,输入“[BrowsableAttribute(false)]”是一样的效果。对于那些没有指定特性的属性或者类,编译器都使用默认特性和默认特性值加以描述。在这个例子中,BrowsableAttribute的默认值为true。这个原则对于Visual Basic .NET同样是一致的。两者唯一的区别就是Visual Basic .NET使用尖括号(‘<’和‘>’)来标记特性,而不是在C#中使用的中括号(‘[’和‘]’)。

同时,我们注意一下在图1中Data属性的值“abc”是粗体。这意味着属性的值不是默认值,而且这个值在设计器为form或者control生成代码的时候将会保存下来(即会生成一个赋值语句)。而对于属性的默认值就没有必要来生成赋值语句,生成代码意味着增加组件初始化的时间(InitializeComponent方法)和代码文件的大小。那么SimpleComponent该如何将默认值通知属性窗口的呢?要实现这个特性,我们就需要使用DefaultValueAttribute特性对属性加以描述,也就可以在对象的构建器中为属性赋值。当属性窗口显示属性值的时候,它就会比较当前值和DefaultValueAttribute指定的默认值,如果两者不相等的话,就会把值显示成粗体。在下面的例子里,Data属性的值如果不是“(none)”就会被显示成粗体。

[DefaultValue("(none)")]

public string Data

{

// . . .

}

我们同样可以给属性添加更为复杂的判断逻辑而不只是一些简单的固有值的比较,这可以通过给组件增加一些特殊方法加以实现。属性判断逻辑方法的名字必须以“ShouldSerialize”开头,并且接着就是属性的名字,而且此方法的返回值为“Boolean”。在这个例子里,这种方法就叫“ShouldSerializeData”。在SimpleComponent组件中增加下面的代码就可以实现和DefaultValueAttribute同样的效果,不过他却可以有更强的逻辑代码。

private bool ShouldSerializeData()

{

return Data != "(none)";

}

一般来说,将属性分类对设计者来说界面更加友好。我们就是用CategoryAttribute特性来给属性分类。这个特性就使用一个简单的类目字符串,属性窗口可以据此将属性显示在类目的子项中。类目名称可以自行决定。

[DefaultValue("(none)"), Category("Sample")]

public string Data

{

// . . .

}

组件开发者经常遇到的一个问题就是如何实现这个类目字符串的本地化。我们看看CategoryAttribute类,就可以看到他的GetLocalizedString方法就提供了这样的功能。要实现类目字符串的本地化,就要从CategoryAttribute类派生新的特性类。在这个例子里,我们从组件的字串资源中得到以键值为索引的本地化的类目字符串。在指定属性的CategoryAttribute特性时,用这个键值(Key)替换原来的类目名作为输入参数。这样属性窗在查询属性的CategoryAttribute就会调用GetLocalizedString方法并且把key值作为参数传入方法,在属性窗口中显示返回属性的类目名称。
出处:本站原创 作者:佚名
 阅读排行
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.