2015-08-29 70 views
1

我已經爲PropertyGrid定義了一個類。其中兩個屬性是TextColor和TextFont。我無法直接或通過定義常量來設置它們的默認值。PropertyGrid - 如何設置屬性的默認顏色值

Private Const dTextColor As Color = Color.Black 

不允許我設定值。設置默認字體常量的同樣問題。

+0

爲什麼它需要是一個常量,如果它只是初始默認值? '公共屬性TextColor As Color = Color.Black'將正常工作。 – Plutonix

+0

我實際上是先定義常量,然後在defaultvalue屬性中使用常量:DefaultValueAttribute(dTextColor)。使用ReadOnly dTextColor,從定義它中刪除了錯誤。但是,它不接受DefaultValueAttribut()中的只讀dTextcolor。 – gfxusr

+1

http://stackoverflow.com/questions/25783386/overridden-forecolor-property-gets-reset-when-compiling/25786062#25786062 –

回答

1

在.net中不能使用constcolor

用戶定義的類型,包括類,結構體和數組,不能是const。

詳情MSDN

在恆定聲明中指定必須爲sbyte,字節,短,USHORT,INT,UINT,長,ULONG,炭,浮點,雙精度,小數類型, bool,字符串,枚舉類型或引用類型。

而不是使用Private Const dTextColor As Color = Color.Black您可以使用Private readonly dTextColor As Color = Color.Black

1

當屬性不​​是簡單類型時,您需要添加ShouldSerialize and Reset方法。這裏有一個例子,其中的默認值是Pink

Public Class Foo 

    Public Property TextColor As Color = Color.Pink 

    Private Function ShouldSerializeTextColor() As Boolean 
     Return (Me.TextColor <> Color.Pink) 
    End Function 

    Private Sub ResetTextColor() 
     Me.TextColor = Color.Pink 
    End Sub 

End Class 

enter image description here

0

雖然比約恩 - 羅傑的解決方案可能是最好的,你可以使用DefaultValue屬性了。其中一個重載允許您指定哪種類型(System.Type)的默認值是什麼以及默認值是多少。然而,「默認值」參數是一個字符串,但主系統類似乎能夠將其轉換爲正確的值。

<DefaultValue(GetType(Color), "Black")> _ 
Public Property TextColor As Color = Color.Black