Я создал производный элемент управления вкладками около года назад. Я не собираюсь публиковать здесь источник, потому что он длиной около 700 строк и довольно запутанный. Может быть, я найду время, чтобы очистить код, а затем выпустить его здесь. А пока я кратко опишу способ его сборки.
На каждой вкладке имеется значок «X» для слева заголовка, а страницы вкладок поддерживают переупорядочение путем перетаскивания и перемещения их между несколькими вкладками.
Я выбираю простой способ получить значок на вкладке страницы. Элемент управления с вкладками имеет свойство TabControl.ImageList
, а на вкладке - свойство TabPage.ImageIndex
. Поэтому я просто добавил три значка в список изображений - обычный, при наведении, нажатие - и обработал события мыши.
С помощью TabControl.GetTabRect()
вы можете проверить, находится ли указатель мыши над определенной вкладкой, и с помощью некоторой математики вы обнаружите, находится ли она над значком. Затем вам просто нужно изменить значок в зависимости от состояния кнопки мыши и в конечном итоге удалить вкладку под мышью, если кнопка была нажата.
Основная проблема этого решения заключается в том, что при расчете, если мышь находится над значком, необходимо знать, где значок нарисован относительно вкладки, и это может измениться в новой версии Windows. И значок слева от заголовка, но это выглядит не так уж плохо.