Was für Eigenschaften für mich gearbeitet, die ich nicht außer Kraft setzen kann den new
Operator verwendet. Zum Beispiel die MultiSelect
Eigenschaft auf einer ListView
Kontrolle. Ich möchte MultiSelect
standardmäßig auf false
, aber ich möchte immer noch in der Lage sein, es zu ändern.
Wenn Ich stelle es nur false
im Konstruktor oder in InitializeComponent
, das Problem (glaube ich) ist, dass der Standardwert immer noch true
ist, also wenn ich den Wert auf true
im Designer eingestellt, die Designer bemerkt, dass true
ist die Standardeinstellung, und so wird die Eigenschaft überhaupt nicht gesetzt, anstatt sie explizit auf das zu setzen, was sie bereits als Standard ansieht. Aber dann wird der Wert false
stattdessen, weil das ist, was im Konstruktor festgelegt ist.
, um dieses Problem habe ich den folgenden Code verwendet:
/// <summary>Custom ListView.</summary>
public sealed partial class DetailsListView : ListView
{
...
[DefaultValue(false)]
public new bool MultiSelect {
get { return base.MultiSelect; }
set { base.MultiSelect = value; }
}
Dies ist die Steuerung noch erlaubt eine funktionierende MultiSelect
Eigenschaft zu haben, die standardmäßig auf false
statt true
, und die Eigenschaft kann immer noch auf die umgeschaltet werden neue Kontrolle.
EDIT: Ich stieß auf ein Problem mit abstrakten Formen zu verwenden. Ich habe abstrakte Formularklassen verwendet, mit einer konkreten Implementierung, zu der ich wechseln kann, wenn ich den Designer verwenden muss. Ich habe festgestellt, dass die Eigenschaften meines benutzerdefinierten Steuerelements auf die alten Standardwerte zurückgesetzt wurden, als ich die Klasse wechselte, von der ich geerbt habe. Ich habe dieses Verhalten anscheinend korrigiert, indem ich im Konstruktor des benutzerdefinierten Steuerelements Eigenschaften auf ihre Standardwerte festgelegt habe.
Können Sie ein Beispiel geben, wie Sie das auf Basisklasseneigenschaften anwenden? –
Entschuldigung - es ist '[DefaultValue (someValue)]'. Hier ist ein Link zu der MSDN darauf mit Beispiel: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute%28v=vs.90%29.aspx – Bridge
Ich denke DefaultValue Attribut ist was du brauchen. Die Visual Studio-IDE speichert den im Attribut angegebenen Standardwert in der Designer-Datei. Wenn der Benutzer den Standardwert auf einen anderen Wert ändert, aktualisiert Visual Studio IDE die Designer-Datei mit einem neuen Wert. Dadurch wird verhindert, dass der vorherige Wert erneut geladen wird, wenn die Steuerung erneut geöffnet wird, da der Standardwert bereits überschrieben wurde. – jags