Лучший способ создать кнопку, отображающую выбранный цвет

Вы знаете эти кнопки выбора цвета с маленьким прямоугольником внутри, отображающим текущий выбранный цвет? Как в продуктах MS Office.

Я хотел бы реализовать один с помощью С#/.NET. Итак, у меня есть симпатичная маленькая иконка с пурпурным прямоугольником (который должен отображать цвет) и прозрачным фоном.

Я могу придумать два способа, как это можно сделать, но оба они не очень элегантны:

  • Отредактируйте значок с помощью графического программного обеспечения, чтобы он имел сплошной цвет фона вместо прозрачности, и измените его размер, чтобы он был точно таким же, как и кнопка, содержащая его. Это позволит использовать TransparentColor=Manenta в сочетании с фоном кнопки, однако иконку придется редактировать всякий раз, когда изменяется размер кнопки, фоновый цвет панели инструментов или что-то еще.
  • Редактируйте значок программно всякий раз, когда выбирается новый цвет. Будет работать, но мне кажется немного сложным (в отношении разработки и производительности).

Так. Может быть, я упускаю очевидный и простой способ реализации такой кнопки? Заранее спасибо за любые подсказки/предложения/вдохновение :)


person peter p    schedule 22.11.2009    source источник


Ответы (3)


Вы можете легко переопределить метод OnPaint и нарисовать прямоугольник любого желаемого цвета.

person Joey    schedule 22.11.2009
comment
Вы правы, это не будет слишком сложно. Но это также означало бы изменение кода при изменении значка :( Со свойством Image#TransparentColor и всеми этими пурпурными значками, я надеюсь, что есть элегантный способ решить эту проблему (что я просто слеп, чтобы см., может быть) :-/ - person peter p; 22.11.2009

Понятно, что элегантного решения нет. Я выбрал первый, используя прозрачность PNG и BackColor, с недостатком, заключающимся в необходимости окрашивать фон png, как фон содержащей панели. Этот способ кажется наименее болезненным.

person peter p    schedule 22.11.2009

Я не вижу причин использовать для этого иконку, PNG или любой другой ресурс изображения. Это кажется пустой тратой ресурсов.

Просто рисуйте прямоугольники из кода, рисуя цвета, которые в настоящее время являются частью списка цветов элемента управления. В идеале ваш элемент управления позволит вызывающей стороне добавлять свои собственные цвета. И это не потребует возни с изображениями.

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

person Jonathan Wood    schedule 11.02.2011