2009-10-05 8 views
15

bekam ich den Wert richtig zu zeigen, mit:Wie legen Sie den Standardwert von Farben in einem benutzerdefinierten Steuerelement in Winforms fest?

[DefaultValue (typeof (Color), "255, 0, 0")] 
    public Color LineColor 
    { 
     get { return lineColor; } 
     set { lineColor = value; Invalidate (); } 
    } 

Aber nachdem ich das Projekt der Steuerung neu zu laden verwendet wird, wird dieser Wert auf Weiß gesetzt, die ich wieder zurücksetzen, um wieder zu Red aufrufen kann, aber Ich verstehe das Problem nicht.

Wie sollen Sie den Standardwert festlegen und sicherstellen, dass er erhalten bleibt, wenn ich den Wert nicht manuell vom Standardwert ändere?

Eigentlich ist das ich tue auch, die Rückseite und ForeColor zu diesen Werten und dem VS-Eigenschaftseditor setzt zeigt sie, als ob sie vom Standardwert geändert werden.

Ist das falsch?

public CoolGroupBox () 
    { 
     InitializeComponent (); 
     base.BackColor = Color.FromArgb (5, 5, 5); 
     base.ForeColor = Color.FromArgb (0, 0, 0); 
    } 

Antwort

4

Das [DefaultValue(...)] Attribut ist ein Hinweis auf Designer und Code-Generatoren. Es ist KEIN Befehl an den Compiler.

Weitere Informationen in this KB article.

+0

Danke, das wusste ich nicht. Ich habe eine Kombination aus dem Wert innerhalb des Konstruktors und dem Standardwert verwendet, der jetzt korrekt angezeigt wird. Außer Rot muss es Rot sein, wenn es 255, 0, 0 ist, VS hält es immer noch für anders als Rot. –

+0

Es funktioniert, aber wenn Sie 255, 0, 0 verwenden, denkt VS, dass es anders als Rot ist. Es erscheint als fett. –

8

Was ist nur die private Variable auf die Standardfarbeinstellung, die Sie wollen?

private Color lineColor = Color.Red; 

public Color LineColor 
{ 
     get { return lineColor; } 
     set { lineColor = value; Invalidate (); } 
} 

Wenn Sie es wünschen erhalten, nehmen Sie nur das Set Accessor aus.

bearbeiten

Ich sehe, möchten Sie die Eigenschaftsliste im Designer die Standardfarbe zu zeigen.

Sie haben die Backcolor-Eigenschaft der Basissteuerung außer Kraft zu setzen, fügen Sie eine neue Default für Ihre neue Eigenschaft, und legen Sie dann tatsächlich die Standardfarbe im Konstruktor oder in der InitializeComponent() -Methode (in den designer.cs Datei), was wahrscheinlich besser ist, da dies für den Designer ist.

public partial class RedBackgroundControl : UserControl 
{ 
    public RedBackgroundControl() 
    { 
     InitializeComponent(); 
     base.BackColor = Color.Red; 
    } 

    [DefaultValue(typeof(Color), "Red")] 
    new public Color BackColor 
    { 
     get 
     { 
      return base.BackColor; 
     } 
     set 
     { 
      base.BackColor = value; 
     } 
    } 
} 
+0

Danke, als ich das gemacht habe, wird der Wert immer noch fett angezeigt, wie ich es von der Standardeinstellung geändert habe. Ich habe auch das Attribut DefaultValue hinzugefügt, aber das hat nichts geändert. –

+0

Auch von konserviert meinte ich zunächst. Danach kann der Benutzer einstellen, was er will. –

16

Der Trick ist, die Hex-Code der Farbe zu verwenden:

[DefaultValue(typeof(Color), "0xFF0000")] 
    public Color LineColor 
    { 
      get { return lineColor; } 
      set { lineColor = value; Invalidate (); } 
    } 

Ich glaube, du auch „255, 0, 0“ verwenden können, bin aber nicht sicher und haben in der Regel verwendet, um entweder die genannten Farben oder die Hex-Code.

+0

Danke, es funktioniert für mich. – Pedro77

+0

Ich habe gerade getestet und kann bestätigen, dass sowohl RGB-Strings als auch ARGB-Strings gültig sind. Verwenden Sie entweder "255, 0, 0" oder "255, 255, 0, 0", um Rot darzustellen. –

-1

Es ist durchaus ein Artikel über Default Eigenschaft Initialisierung auf CodeProject

+0

Noch nichts über Farben im Besonderen. –

-1

In DependencyProperty ein UIPropertyMetadata verwenden

wie:

public static DependencyProperty TrueColorProperty = DependencyProperty.Register(
     "TrueColor", typeof (Color), typeof (LedControl), new UIPropertyMetadata(Colors.Red)); 
+0

Die Frage ist über Winforms nicht wpf –

0

ich kein Glück mit dem DefaultValue Attribut mit Eigenschaften haben vom Typ Color oder vom Typ Font, aber ich war erfolgreich mit diesen Methoden in der msdn Dokumentation beschrieben:

„Definieren von Standardwerte mit dem ShouldSerialize und Reset-Methoden“ http://msdn.microsoft.com/en-us/library/53b8022e(v=vs.90).aspx

benutzte ich Color.Empty und null sind, wie die Werte für meine private Unterstützung Felder und hatten die öffentlichen Eigenschaften immer etwas Nützliches zurück.

Verwandte Themen