• Программинг

Нужны источники бесперебойного питания?

Источники бесперебойного питания от дизельстор

Компонент SplitButton с выпадающим списком

Как то мне понадобился компонент кнопка с выпадающим списком – Split Button. В стандартной поставке такого компонента нет, поэтому я отправился искать таковой на CodeProject. Выбор там большой, но мне конкретно нужна была кнопка со стрелочкой, по нажатию на которую, выпадало меню. Пара проектов с этого сайта были достойны внимания, но все же хотелось сделать что-то свое и это свое сразу компилилось в экзешник. Я взял за основу некоторый код, автора я к сожалению не помню и откуда брал, тоже. Доработал, добавил функциональности и кое-то убрал. В итоге получился симпатичный контрол.

Вкратце, как это работает

Наследуем свой класс от Button. Описываем приватные переменные, которые нам нужны для отрисовки. Добавляем поле ShowSplit, которое отвечает показывать или нет стрелку на кнопке. Поле State хранит значение текущего состояния кнопки.

Так как кнопку придумали свою, то для нее нужно описать реакцию на основные события. Поэтому последовательно перегружаем методы IsInputKey, OnGotFocus, OnKeyDown, OnKeyUp, OnLostFocus, OnMouseDown, OnMouseEnter, OnMouseLeave, OnMouseUp и главный метод, который отвечает за внешний вид – OnPaint. В самом методе OnPaint описываем как будет выглядеть кнопка в различных состояниях. Метод PaintArrow рисует ту самую стрелочку.

В дизайнере для кнопки, необходимо задать объект ContextMenuStrip. Элементами ContextMenuStrip вы управляете сами, а все остальное на себя берет SplitButton.

Исходники класса прилагаются. Комментарий к коду практически нет, т.к. большая часть кода не моя, но я планирую дорабатывать компонент и со временем опишу комментарии.