我在组件中添加了一个新属性,以唯一标识项目中的每个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();
}
}
问题是,对于表单中的现有控件,表单只在我更改表单中的内容(read:anything)后序列化新属性。它可能是形式,大小等的标题。
但我想看到的是,当我打开它时,它检测到表单已经更改,因此我可以保存它并且新属性被序列化。
有没有人知道打开表单后如何保存新属性以及如何修复它?当然,任何其他有用的想法也会受到赞赏。
答案 0 :(得分:0)
我猜它正在进行基本的健全性检查(即应该任何事情已经改变) - 以防止意外的源代码更改(我讨厌它在打开文件时可能导致副作用 - 我在看着你,DBML!)。
另一方面,强制序列化一般(由于上述原因,我不认为它会适用):
public bool ShouldSerializeGridIdentifier() { return true; }
bool ShouldSerialize*()
和void Reset*()
是框架使用的约定。