2008-09-04 7 views
3

Ich habe eine Linienfarbe Eigenschaft in meinem benutzerdefinierten Rastersteuerelement. Ich möchte, dass es standardmäßig Drawing.SystemColors.InactiveBorder ist. Ich habe versucht:DefaultValue für System.Drawing.SystemColors

[DefaultValue(typeof(System.Drawing.SystemColors), "InactiveBorder")] 
public Color LineColor { get; set; } 

Aber es scheint nicht zu funktionieren. Wie mache ich das mit dem Standardwert Attribut?

Antwort

9

Sie müssen das erste Argument von SystemColors zu Color ändern.
Es scheint, dass es keinen Typkonverter für den Typ SystemColors gibt, nur für den Typ .

[DefaultValue(typeof(Color),"InactiveBorder")] 
2

Nach dem Link Matt geschrieben, das Default Attribut nicht den Standard Wert der Eigenschaft, es lässt nur den Formular-Designer wissen, dass die Eigenschaft einen Standardwert hat. Wenn Sie eine Eigenschaft vom Standardwert ändern, wird sie im Eigenschaftenfenster als fett dargestellt.

Sie können einen Standardwert mit Hilfe der automatischen Eigenschaften festgelegt - Sie werden es auf die altmodische Art und Weise zu tun haben:

class MyClass 
{ 
    Color lineColor = SystemColors.InactiveBorder; 

    [DefaultValue(true)] 
    public Color LineColor { 
     get { 
      return lineColor; 
     } 

     set { 
      lineColor = value; 
     } 
    } 
} 
+2

Wenn man auf das Attribut im Eigenschaftenfenster im Design klicken nach rechts hatte Zeit und wählen Sie den Befehl _Reset_, es wird ein Fehler angezeigt, der anzeigt, dass ein Bool nicht in eine Farbe konvertiert werden kann. @aku Lösung wird funktionieren. – Pooven

+0

Zusätzlich zur Anzeige der Eigenschaft fett oder nicht, formatiert der Formulardesigner die Eigenschaft nicht serialisiert, wenn sie den im 'DefaultValueAttribute' angegebenen Wert hat, d. H. In dieser Methode wird für diese Eigenschaft kein Code in der' InitializeComponent'-Methode generiert. –