如何在designer.cs中强制序列化新属性
本文关键字:新属性 序列化 属性 designer cs | 更新日期: 2023-09-27 17:54:59
我为组件添加了一个新属性,以唯一地标识项目中的每个gridcontrol,称为GridIdentifier:
public class MyCustomGridControl : GridControl
{
private string gridIdentifier = "empty";
[Browsable(true)]
[DefaultValue("empty")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string GridIdentifier
{
get { return gridIdentifier; }
set { gridIdentifier = value; }
}
public MyCustomGridControl()
{
if (this.gridIdentifier == "empty")
this.gridIdentifier = Guid.NewGuid().ToString();
}
}
问题是,对于现有的控件在我的表单,表单只序列化新的属性后,我改变了一些东西(读取:任何)在表单。它可能是表单的标题,大小等。
但是我想看到的是,当我打开它时,它检测到表单发生了变化,所以我可以保存它,新的属性被序列化。
有没有人知道为什么新的属性没有得到保存后打开表单,以及如何修复它?如果有任何其他的帮助,我们当然也很感激。
我猜它正在做基本的完整性检查(即应该任何更改)-以防止意外的源代码更改(我讨厌在打开文件时它会导致副作用-我看着你,DBML!)。
另外,强制序列化通常是(由于上面的原因,我认为它不适用):public bool ShouldSerializeGridIdentifier() { return true; }
bool ShouldSerialize*()
和void Reset*()
是框架使用的约定。