组件属性的缺省值有两种指定方法:
一、使用属性的特性类来描述
比如如下声明一个类的属性
public class MyClass
{
private int myProperty;[DefaultValue(3)]public int MyProperty{get{ return myProperty;}set{if(myProperty!=value)myProperty=value;}}....
}
更为通用的特性描述是这样定义的 [DefaultValue(typeof(<MyType>),<FormatString>)] 其中<MyType>是Color,Font,Point,Int,String,float...等常见数据类型,<FormatString>就是<MyType>的ToString()方法输出的格式文本字串(通常是这样,当然如果类型在实现ConvertFrom时定义的格式不同就另当别论了),下面是例子:
[DefaultValue(typeof(Color),"White")]以及
[DefaultValue(typeof(Point),"{X=110,Y=120}")]等等...
二、使用ShouldSerialize<PropertyName>方法
这种方法的特殊性在于方法的命名上有约定,命名必须以ShouldSerialize开头,然后返回类型必须是bool类型,方法实现中要定义该属性的与缺省值的比较逻辑,如果设计器在调用这个方法之后返回true,就粗体显示属性值,这通常用于一些很复杂的类属性,如Font或自定义类型。另外,一般优良的设计都还同时实现Reset<PropertyName>方法,以在设计器中激活“重置”菜单项。
关于组件属性的特性设定请看我整理的《编写与.net属性窗口交互的RAD组件》