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

StackOverflow https://stackoverflow.com/questions/1779519

Вопрос

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

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

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

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

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

Это было полезно?

Решение 2

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top