如何保存自定义控件的属性

yfyang 2002-12-23 09:58:22
我定义了一个控件,该控件里的有一个属性是一个类,
但是在设计模式下设置好该属性的值,下次打开的时候就没有了
...全文
67 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dy_2000_abc 2002-12-23
  • 打赏
  • 举报
回复
那是因为你没有保存它,你要保存它需要做不少工作:
举个简单的例子,有一个类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);

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧