Как показать константу для свойства вместо значения


Привет Я работаю в VB.Net 2010 framework 2.0. Предположим, я объявляю свойство:

Dim NewColor As Color = Color.FromArgb(150, 145, 145)

Private _myColor As Color = NewColor 
Public Property MyColor() As Color
    Get
        Return _myColor
    End Get
    Set(ByVal value As Color)
        _myColor = value
    End Set
End Property

В конструкторе форм свойство "MyColor" будет рассматриваться как значение 150, 145, 145. Я хочу видеть это значение как "NewColor" в конструкторе форм. Это то же самое, что ControlDark, ActiveBorder и т. д. системный цвет. Я хочу, чтобы вместо значения цвета дизайнер показывал имя переменной. Платформа .Net framework также использует вышеупомянутую реализацию для системных цветов и то же самое я хочу делать.

Заранее благодарю за любой ответ.

1 2

1 ответ:

Это возможно, но нелегко.

Вы должны определить свой собственный тип, вероятно, скрыть текущее свойство в браузере с атрибутом <Browsable(False)> и создать теневое свойство, которое является вашим собственным типом. Этот тип должен знать, когда он" указывает " на переменную или имеет сам цвет.

В новом типе вы должны переопределить ToString, чтобы вернуть то, что вы хотите отобразить. И создайте свой собственный редактор. Смотрите EditorAttribute для получения дополнительной информации.

Вы можете создать выпадающее меню, как у Color, с дополнительной вкладкой, в которой перечислены ваши переменные.

Если вы не хотите создавать дополнительные свойства (это плохо OO), вы также можете определить TypeConverter в классе, и указать каждое свойство и как себя вести.

Кстати: структура цвета хранит значение KnownColor (цвет.Красный или системный цвет.WindowText) или значения RGB. Таким образом, он знает, что указывает на известный цвет. Ваша структура также должна знать, указывает ли она на переменную (и какая переменная) или является системой.Цвет.