还是来看程序:
//定义了一个类
class test
{
//性别属性
private string sex;
[Category("数据"), Browsable(true), ReadOnly(true), DisplayName("性")]
//Category是分类,DisplayName这里起到汉化的作用,Browsable是否可见,ReadOnly是否只读
public string Sex
{
get
{
return sex;
}
set
{
sex = value;
}
}
//姓名属性
private string name;
[Category("数据"), Browsable(true), ReadOnly(false), DisplayName("姓名")]
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
//年龄属性
private int age;
[Category("数据"), Browsable(true), ReadOnly(true), DisplayName("年龄")]
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
//专业技能属性,这里表现为一个自定义类的对象
[Category("专业技能"), Browsable(true), ReadOnly(true)]
private Professional profession = new Professional(".net,java", "sqlserver,oracle");
public Professional Profession
{
set
{
profession = value;
}
get
{
return profession;
}
}
//系统自带类对象属性
private Size windowSize = new Size(100, 100);
[CategoryAttribute("文档设置")]
public Size WindowSize
{
get { return windowSize; }
set { windowSize = value; }
}
private Font windowFont = new Font("宋体", 9, FontStyle.Regular);
[CategoryAttribute("文档设置")]
public Font WindowFont
{
get { return windowFont; }
set { windowFont = value; }
}
}
//使用TypeConverterAttribute为自定义类型转换器指定目标类
[TypeConverterAttribute(typeof(ProfessionalConverter)), DescriptionAttribute("部分专业技能。"),DisplayName("专长")]
public class Professional//自定义Professional类
{
public Professional(string lang, string db)
{
language = lang;
database = db;
}
private string language;
[Category("数据"), Browsable(true), ReadOnly(true), DisplayName("语言")]
public string Language//语言属性
{
set
{
language = value;
}
get
{
return language;
}
}
private string database;
[Category("数据"), Browsable(true), ReadOnly(true), DisplayName("数据库")]
public string Database//数据库属性
{
set
{
database = value;
}
get
{
return database;
}
}
}
//以下为类型转换类,这样自定义类Professional的属性才能扩展开来
public class ProfessionalConverter : ExpandableObjectConverter
{
//这里将对象属性转换为String(显示属性)
public override bool CanConvertTo(ITypeDescriptorContext context, System.Type destinationType)
{
if (destinationType == typeof(Professional))
return true;
else
return base.CanConvertTo(context, destinationType);
}
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, System.Type destinationType)
{
if (destinationType == typeof(System.String) && value is Professional)
{
Professional so = (Professional)value;
return "语言:" + so.Language + ",数据库: " + so.Database;
}
return base.ConvertTo(context, culture, value, destinationType);
}
//将String重新转换成对象属性(编辑后写回)
public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)
{
if (sourceType == typeof(string))
return true;
else
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value is string)
{
try
{
string s = (string)value;
string[] str = new string[4];
str = s.Split(new char[] { ':', ',' });
Professional so = new Professional( str[1],str[3]);
return so;
}
catch
{
throw new ArgumentException("无法将" + (string)value + "转换为Professional 类型");
}
}
return base.ConvertFrom(context, culture, value);
}
}
基本的用法就这样了,还不是很熟练。大家多多指教。