那是因为你没有保存它,你要保存它需要做不少工作:
举个简单的例子,有一个类abc,这个类就是你要保存的属性的类,abc类必须实现ISerializable接口,还要定义一个TypeConverter,只有这样的类才能够保存设计时的状态:
[Serializable()]
[DefaultProperty("Text")]
[TypeConverter(typeof(abcConverter))]
public class abc:ICloneable,ISerializable
{
public object Clone()
{
return new abc(this.Text);
}
public void GetObjectData(SerializationInfo info,StreamingContext context)
{
info.AddValue("Text",this.Text);
}
public abc(string text)
{
this.Text=text;
}
public abc()
{
this.Text="";
}
private string _Text;
[Description("获取特定项的文字")]
public string Text
{
set {_Text=value;}
get {return _Text;}
}
}
public class abcConverter : ExpandableObjectConverter
{
public override bool CanConvertTo(ITypeDescriptorContext context,Type destinationType)
{
if (destinationType==typeof(InstanceDescriptor))
return true;
return base.CanConvertTo(context,destinationType);
}
public override object ConvertTo(ITypeDescriptorContext context,CultureInfo culture,object value,Type destinationType)
{
if (destinationType==typeof(InstanceDescriptor))
{
abc item=(abc)value;
ConstructorInfo ci=typeof(abc).GetConstructor(new Type[]{typeof(string)});
return new InstanceDescriptor(ci,new object[]{item.Text},true);
}
return base.ConvertTo(context,culture,value,destinationType);
}
}
你只要重写你的属性的类,为它实现ISerializable接口,同时在为它写一个ExpandableObjectConverter就可以了。ExpandableObjectConverter看起来麻烦,其实非常好写,一举上面的例子,你只需要将你要保存的属性类的属性填入...:ConstructorInfo ci=typeof(abc).GetConstructor(new Type[]{typeof(string),...});
return new InstanceDescriptor(ci,new object[]{item.Text,...},true);