2012-10-12 11 views
7

Wie Sie die Standardeigenschaften für benutzerdefinierte Steuerelemente festlegen, d. H. Wenn sie zuerst auf das Formular im Designer gezogen werden?C# WinForms benutzerdefinierte Steuerelement Standardeigenschaften

Kann hier oder über Google keine Antwort finden; Alles, was ich bekomme, ist, wie man die Werte einschränkt.

Breite & Höhe als Beispiele, wenn ich sie im Konstruktor setze, werden sie bei jedem Öffnen des Designers auf das Steuerelement angewendet. Wie setze ich sie auf einen Standard, der nie wieder angewendet wird, nachdem der Benutzer die Eigenschaften ändert?

+0

Können Sie ein Beispiel geben, wie Sie das auf Basisklasseneigenschaften anwenden? –

+0

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

+0

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

Antwort

-1

Legen Sie im Konstruktor die Werte Ihrer Eigenschaften fest, die beim Ziehen in den Erstellungsbereich angezeigt werden sollen. Oder wenn sie die integrierten Eigenschaften des Basissteuerelements sind, legen Sie sie in der Designer-Codeklasse fest.

+1

Wenn Sie die Eigenschaften im Konstruktor festlegen, werden sie bei jedem Öffnen des Designers angewendet, was bedeutet, dass sie nicht festgelegt werden können. –

-1

Im Folgenden können Sie den Wert hinzufügen, wenn Sie das Formular anzeigen, danach können Sie es wie gewünscht festlegen.

private int widthLength = 5; 

public int Width {  

    get { return widthLength ; } 
    set { widthLength = value; 
} 
+1

Dadurch werden die Standardeigenschaften nicht angewendet, wenn das Steuerelement im Designer auf das Formular gezogen wird. Ich bekomme auch eine Compiler-Warnung, dass es das geerbte Mitglied verbirgt; Das Hinzufügen von "Neu", wie von der Warnung angewiesen, ändert das Verhalten nicht. –

5

Versuchen Sie das DefaultValue Attribut.

private int height; 

[DefaultValue(50)] 
public int Height 
{ 
    get 
    { 
     return height; 
    } 
    set 
    { 
     height=value; 
    } 
} 
+1

Dies funktioniert nicht, da die Basisklasseneigenschaft für Höhe nicht von ihr überschrieben wird. –

2

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.