Ich habe eine Basisklasse und eine abgeleitete Klasse (unten beschrieben) und eine einzelne Eigenschaft, "TestProperty". Mein Ziel ist es, den Wert, den ich in testproperty gesetzt habe, innerhalb der initialize-Komponente zu serialisieren. Das ist sehr SCHLÜSSEL, denn zu einem späteren Zeitpunkt muss die Basisklasse zum Entwurfszeitpunkt auf den neuen Wert dieser Eigenschaft zugreifen können, und wenn dieser Wert nicht in initializeComponent festgelegt ist, habe ich keinen Zugriff auf dieses neue Element. " Default-Wert "wenn Sie gut (aber ich glaube nicht, dass das Default-Value-Attribut in diesem Fall relevant ist).Abgeleitete Klasse erzwingende Eigenschaft in initializecomponent geschrieben werden
Im folgenden Fall ist die einzige Möglichkeit, meine Eigenschaft zu serialisieren, wenn ich "abgeleitet" im Designer öffnen und die Eigenschaft manuell auf einen neuen Wert festlegen.
Ich bin besorgt, dass eine benutzerdefinierte codedomserializer wird die Lösung sein, aber ich versuche sehr, das zu vermeiden. Ich möchte, dass "Base" so wenig Code wie möglich hat.
Wie kann ich meine Eigenschaft (setzen, wo ich es bekommen kann, in Code), um in initializecomponent mit der Bearbeitung vom Designer gestaut bekommen?
public partial class Base : Form
{
public Base()
{
InitializeComponent();
TestProperty = "set in the base class";
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string TestProperty
{
get;
set;
}
}
Und eine einfache Klasse abgeleitet
public partial class Derived : Base
{
public Derived()
{
InitializeComponent();
this.TestProperty = "i want to be packed into initializecomponent somehow";
}
}
Einige weitere Informationen darüber, warum ich zu tun habe versucht, was ich tue.
Mein Problem ist dies, wenn ich im Designer "abgeleitet" geöffnet habe, habe ich eine benutzerdefinierte editorcontrol bieng verwendet, um eine Eigenschaft zu bearbeiten, genannt "editableproperty". EditableProperty benötigt in diesem Fall Zugriff auf TestProperty. Zur Laufzeit ist es kein Problem, ich habe vollen Zugriff auf Abgeleitet als ein Typ, und es ist kein Problem.
Das Problem ist, dass das EditorControl, das ich verwende, in einer anderen Assembly ist, und es (aus welchen Gründen auch immer, weil es in einer anderen Assembly als abgeleitet ist), lädt nicht den neuen Wert, den ich einstelle der Konstruktor von abgeleitet.
Grundsätzlich, wenn ich geöffnet im Designer und versuchen, einen benutzerdefinierten Editor zu verwenden, wird es "in der Basisklasse" als Wert für TestProperty festgelegt. Ich muss TestProperty in initializecomponent gesetzt haben, damit mein editorcontrol den Wert sieht.
Es sollte nicht erforderlich sein, dass dieser Wert direkt in InitializeComponent geschrieben wird, wenn Sie ihn selbst festlegen. Sie sagen, dass Sie keinen Zugriff auf diesen neuen "Standardwert" haben, aber jede Verwendung von Derived (einschließlich der Ableitung anderer Formulare daraus) enthält diesen Wert. Vielleicht, wenn Sie mehr darüber erklären können, was Sie erreichen wollen, wird es mir helfen, Ihnen eine bessere Antwort zu geben. –
Ich (schlecht) bearbeitet die Frage, um hoffentlich zu erklären, was ich versuche zu tun. – greggorob64