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 /вопросы/25783386/   -  person Hans Passant    schedule 29.08.2015


Ответы (3)


Вы не можете использовать const с color в .net.

Определяемые пользователем типы, включая классы, структуры и массивы, не могут быть константами.

Дополнительные сведения см. в MSDN.

Тип, указанный в объявлении константы, должен быть sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, string, enum-type или reference-type.

вместо использования 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

Хотя решение Бьорна-Роджера, вероятно, является лучшим, вы также можете использовать атрибут DefaultValue. Одна из перегрузок позволяет указать, к какому типу (System.Type) относится значение по умолчанию и каким будет значение по умолчанию. Однако параметр «значение по умолчанию» представляет собой строку, но основные системные классы, похоже, могут преобразовать ее в правильное значение.

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