Лучший способ создать кнопку, отображающую выбранный цвет
-
21-09-2019 - |
Вопрос
Вы знаете эти кнопки выбора цвета с маленьким прямоугольником, отображающим текущий выбранный цвет?Как в продуктах MS Office.
Я хотел бы реализовать его с помощью C#/.NET.Итак, у меня есть симпатичный маленький значок с прямоугольником пурпурного цвета (который предназначен для отображения цвета) и прозрачным фоном.
Я могу придумать два способа, как это можно сделать, но оба они не очень элегантны:
- Отредактируйте значок с помощью графического программного обеспечения, чтобы он имел сплошной цвет фона вместо прозрачности, и измените его размер так, чтобы он был точно такого же размера, как кнопка, содержащая его.Это позволит использовать TransparentColor=Manenta в сочетании с кнопкой Background, однако значок придется редактировать каждый раз, когда изменяется размер кнопки, BackColor панели инструментов или что-то еще.
- Редактируйте значок программно каждый раз, когда выбирается новый цвет.Это сработало бы, но мне кажется немного сложным (в отношении разработки и производительности).
Так.Может быть, мне не хватает очевидного и простого способа реализовать такую кнопку?Заранее спасибо за любые подсказки/предложения/вдохновение :)
Решение 2
Очевидно, что элегантного решения не существует.Я выбрал первый вариант, используя прозрачность PNG и BackColor, но имел недостаток в том, что фон PNG нужно было раскрашивать так же, как фон содержащей панели.Кажется, так будет наименее болезненно.
Другие советы
Вы можете легко переопределить OnPaint
и нарисуйте прямоугольник любого цвета по вашему желанию.
Я не вижу смысла использовать для этого значок, PNG или любой другой графический ресурс.Кажется, это пустая трата ресурсов.
Просто нарисуйте прямоугольники из кода, рисуя цвета, которые в данный момент являются частью списка цветов элемента управления.В идеале ваш элемент управления позволит вызывающему объекту добавлять свои собственные цвета.И это не потребует никаких возни с изображениями.
Я просто использовал поле со списком, нарисованное владельцем, когда я это сделал, но я нарисовал цветную рамку, как описываю.Очень просто.