PropertyGrid - Как мога да задам стойност на цвета по подразбиране на свойство

Дефинирах клас за PropertyGrid. Две от свойствата са TextColor и TextFont. Не мога да задам техните стойности по подразбиране нито директно, нито чрез дефиниране на константи.

Private Const dTextColor As Color = Color.Black 

не ми позволява да задам стойност. Същият проблем с настройката на константата на шрифта по подразбиране.


person gfxusr    schedule 29.08.2015    source източник
comment
Защо трябва да е Const, ако е само първоначалното по подразбиране? Public Property TextColor As Color = Color.Black ще работи добре.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 29.08.2015
comment
Всъщност първо дефинирам константата и след това използвам константата в атрибута defaultvalue като: DefaultValueAttribute(dTextColor). С помощта на ReadOnly dTextColor премахна грешката при дефинирането му. Той обаче не приема dTextcolor само за четене в DefaultValueAttribut().   -  person gfxusr    schedule 29.08.2015
comment
stackoverflow.com /questions/25783386/   -  person Hans Passant    schedule 29.08.2015


Отговори (3)


Не можете да използвате const с color в .net.

Дефинираните от потребителя типове, включително класове, структури и масиви, не могат да бъдат const.

За повече подробности MSDN

Типът, посочен в константна декларация, трябва да бъде sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, string, тип enum или референтен тип.

вместо да използвате Private Const dTextColor As Color = Color.Black можете да използвате Private readonly dTextColor As Color = Color.Black.

person Muhammad Saqib    schedule 29.08.2015

Трябва да добавите метод 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

въведете описание на изображението тук

person Bjørn-Roger Kringsjå    schedule 29.08.2015

Въпреки че решението на Bjørn-Roger е може би най-доброто, можете да използвате и атрибута DefaultValue. Едно от претоварванията ви позволява да посочите от кой тип (System.Type) е стойността по подразбиране и каква ще бъде стойността по подразбиране. Въпреки това параметърът "стойност по подразбиране" е низ, но основните системни класове изглежда могат да го преобразуват в правилната стойност.

<DefaultValue(GetType(Color), "Black")> _
Public Property TextColor As Color = Color.Black
person Visual Vincent    schedule 29.08.2015