Хронологически в своем вопросе вы спрашивали, как избавиться от этой полосы вверху. Если вы настаиваете на использовании «фальшивых» страниц вкладок, где вкладки просто управляют содержимым фиксированного набора элементов управления, то уменьшение высоты элемента управления вкладкой до точки, где это не видно, вероятно, является приемлемым решением. Я только что попробовал, и с некоторыми изменениями он выглядит в основном так, как я думаю, вам нужно. Для справки, я бы порекомендовал на самом деле использовать страницы вкладок по назначению, то есть в качестве хостов для элементов управления, даже если вы создаете настраиваемый элемент управления, который объединяет все элементы управления, которые вы хотите видеть. Это будет лучше соответствовать парадигме табуляции.
Для второго пункта вы хотели бы изменить размер вкладок. Невозможный. Платформа предоставляет два варианта для DrawStyle
, Normal и OwnerDrawFixed
. Normal
позволяет Windows устанавливать размер вкладки на основе текста и шрифта, OwnerDrawFixed
означает, что размер вкладки полностью фиксирован. Над этим больше нет контроля. Однако OwnerDrawFixed
дает вам доступ к событию OnDrawItem
, которое вы хотите использовать для рисования самих вкладок.
Теперь кажется, что вы укусили пулю и установили для UserPaint значение True, что означает, что теперь вы делаете весь рисунок. Я рекомендую на этом этапе установить DrawStyle
обратно на Normal
, тогда вы можете добавить некоторый закулисный текст, чтобы Windows автоматически контролировала ширину вкладок. Я предупреждаю, что это не будет очень надежным, поскольку у всех разные настройки шрифта и несколько пикселей, и ничего не будет отображаться правильно.
Итак, здесь я укажу на TabControl.GetTabRect(index As Integer)
, метод, который вы можете использовать для получения ограничивающего прямоугольника данной вкладки. Я использую это в цикле по всем индексам вкладок, а затем делаю весь рисунок, который мне нужен для вкладки, в прямоугольнике, предоставленном на каждой вкладке. Это означает, что мне не нужно использовать OwnerDrawFixed
, чтобы получить границы для рисования внутри.
Тем не менее, если вам нужен лучший контроль, вы на 80% просто реализуете именно тот контроль, который хотите видеть, начиная с Control
или UserControl
. Аналогичного вида можно добиться, перекрывая кнопки с помощью некоторой логики для их рисования и размещения. Тогда вы также можете получить весь текстовый вид, который хотите. Я сам думал так же, но не стал, потому что я все еще принимаю TabPages
. Поскольку вы свободны от этого, было бы еще проще...
person
J Collins
schedule
18.09.2012
SetStyle(ControlStyles.UserPaint, True)
и использовал некоторый код для стилизации компонента. Но я бы хотел использовать собственное событиеOnDrawItem
. Потому что в моем приложении естьMainForm
некоторые переменные и изображения, которые я хочу использовать в событии рисования. Как я могу это сделать? - person sczdavos   schedule 18.09.2012