我有一个基类和一个派生类(如下所述),以及一个属性“TestProperty”。我的目标是让我在 testproperty 中设置的值在 intializecomponent 中序列化。这非常关键,因为稍后,我需要基类在设计时访问此属性的新值,除非该值在 intializecomponent 中设置,否则我将无法访问此新值,“默认值”,如果你好的话(但是,我认为默认值属性在这种情况下不相关)。
在下面的情况下,让我的属性序列化的唯一方法是,如果我在设计器中打开“派生”并手动将属性设置为新值。
我担心自定义 codedomserializer 将成为解决方案,但我非常努力避免这种情况。我希望“基础”的代码尽可能少。
我怎样才能让我的属性(在代码中设置我可以从中获取它的任何地方)通过从设计器中编辑它来卡在 initializecomponent 中?
public partial class Base : Form
{
public Base()
{
InitializeComponent();
TestProperty = "set in the base class";
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string TestProperty
{
get;
set;
}
}
和一个简单的派生类
public partial class Derived : Base
{
public Derived()
{
InitializeComponent();
this.TestProperty = "i want to be packed into initializecomponent somehow";
}
}
关于我为什么要尝试做我正在做的事情的更多信息。
我的问题是,当我在设计器中打开“派生”时,我有一个自定义编辑器控件 bieng 用于编辑某些属性,称为“可编辑属性”。在这种情况下,EditableProperty 需要访问 TestProperty。在运行时,这没问题,我可以完全访问 Derived 作为一种类型,这没问题。
问题是我正在使用的 EditorControl 位于不同的程序集中,并且它(无论出于何种原因,我认为这是因为它在与派生不同的程序集中)不会加载我在派生的构造函数中设置的新值.
基本上,当我在设计器中打开派生并尝试使用自定义编辑器时,它会“在基类中设置”作为 TestProperty 的值。我需要在 initializecomponent 中设置 TestProperty 才能让我的 editorcontrol 看到该值。