Преобразовать ОБЪЕКТ в System.Рисование.Цвет

#c# #.net #colors

#c# #.net #Цвет

Вопрос:

Я знаю, что существует множество способов преобразования цветов в C #, начиная от преобразования строк в значения цвета, преобразования HTML и даже XNA framework; однако у меня есть объект, который возвращает тип System.Рисование.Цвет; но поскольку это «объект», а не «цвет», я, похоже, не могу использовать для него обычные команды color.

 public void SetPropertyValue(string propertyName, object value)
    {
        _PropertyValues[propertyName] = value;
        Console.WriteLine("Setting Property: {0}={1}", propertyName, value);
    }
  

Выше описано, что происходит, когда пользователь изменяет значение в таблице свойств в C #. Результаты приведены ниже:

Известные имена

Настройка свойства: Color=Цвет [затемненный]

Пользовательский цвет

Настройка свойства: Color=Цвет [A=255, R=255, G=255, B=128]

Системный цвет

Настройка свойства: Color=Цвет [ControlText]

Я хотел бы взять значения, которые он имеет там, и фактически преобразовать его в цвет, чтобы я мог использовать его в переменной DefaultColor, которая была создана ранее в программе.

Однако, поскольку это объект, а не фактическая ‘система.Рисование.Color’, я не могу использовать такие вещи, как:

.ToKnownColor()

.ToArgb()

.ToName()

и так далее.

Я знаю, что должен быть способ преобразовать объект в реальный цвет. Я задаю значение.GetType() и он возвращает System.Рисование.Цвет, поэтому система знает, что это цвет, но, хоть убейте, я не могу им манипулировать.

Я пока не эксперт в C #, поэтому извините, если это звучит так просто, но я все равно хотел бы получить некоторую помощь с этим.

Ответ №1:

Объект действительно является Color , на него просто ссылается ссылка на объект. Итак, все, что вам нужно сделать, это придать ему цвет.

 Color myColor = (Color)value;
// now you can do all color operations on myColor
  

Комментарии:

1. Большое вам спасибо; я все еще новичок, когда дело доходит до C #, о некоторых из этих вещей я еще не совсем осведомлен 🙂

Ответ №2:

Преобразовать его в Color :

 var effectiveColor = (System.Drawing.Color)value;
  

Эта вещь в скобках является явным приведением, когда вы сообщаете компилятору, что знаете лучше и что фактический тип переменной — это что-то другое.

Комментарии:

1. Потрясающе, и спасибо за быстрый ответ. Извините, что иногда бываю таким болваном :(. Кстати, почему это работает? Я не очень часто видел подобные аннотации, поэтому не совсем уверен, почему это работает.

2. хаха, большое спасибо за ответ; мне нравится, как вы описали, почему это работает, лол. Это будет весьма кстати. 🙂

Ответ №3:

Вы должны просто иметь возможность преобразовать object в Color , если это все, что нужно:

 Color color = (Color)value;