Почему BackColor не работает для TabControls в .NET? - PullRequest
0 голосов
/ 16 сентября 2008

Если вы используете стандартный элемент управления вкладками в .NET для своих страниц вкладок и пытаетесь немного изменить внешний вид, тогда вы можете изменить цвет спины вкладок, но не для элемента управления вкладками. Свойство доступно, вы можете установить его, но оно не имеет никакого эффекта. Если вы измените задний цвет страниц, а не элемента управления вкладками, это выглядит ... хм, довольно уродливо.

Я знаю, что Microsoft не хочет, чтобы он был установлен. MSDN : ' Это свойство поддерживает инфраструктуру .NET Framework и не предназначено для использования непосредственно из вашего кода. Этот элемент не имеет значения для этого элемента управления. 'Свойство элемента управления только для цвета, которое поддерживает инфраструктуру .NET? ... трудно поверить.

Я надеялся, что с годами Microsoft изменит это, но они этого не сделали. Я создал свой собственный класс TabControl, который переопределяет метод рисования, чтобы исправить это. Но действительно ли это лучшее решение?

В чем причина отсутствия поддержки BackColor для этого элемента управления? Каково ваше решение, чтобы это исправить? Есть ли лучшее решение, чем переопределение метода рисования?

Ответы [ 3 ]

2 голосов
/ 06 ноября 2008

Решение в блоге Раджеша действительно полезно, но оно окрашивает только вкладку элемента управления. В моем случае у меня был tabcontrol на другом цветном фоне. Сами вкладки были серыми, что не было проблемой, но область справа от вкладок отображалась серой полосой.

Чтобы изменить этот цвет на цвет фона, вам нужно добавить следующий код в метод DrawItem (как описано в решении Раджеша). Я использую VB.Net:

...

Dim r As Rectangle = tabControl1.GetTabRect(tabControl1.TabPages.Count-1)
Dim rf As RectangleF = New RectangleF(r.X + r.Width, r.Y - 5, tabControl1.Width - (r.X + r.Width), r.Height + 5)
Dim b As Brush = New SolidBrush(Color.White)
e.Graphics.FillRectangle(b, rf)

...

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

1 голос
/ 18 октября 2008

Цвет фона вкладки, по-видимому, определяется свойствами экрана ОС. В частности, под вкладкой «Внешний вид», Windows и свойство кнопок (Windows XP). Если выбран стиль Windows Classic, вкладка никогда не меняет цвет. Если выбран стиль Windows XP, он по крайней мере меняется с серого на белый при выборе. Поэтому невозможность контролировать цвет фона - это особенность!

0 голосов
/ 01 мая 2009

Спасибо, ЛаураМ. Вы помогли мне встать на правильный путь. Я уже нашел ссылку, предоставленную Оскаром, но она ничего не сделала для полосы в конце.

В конце концов, мне пришлось немного измениться, потому что мне нужно было пролить фоновое изображение в форме или если родитель был чем-то без фонового изображения, то это был задний цвет. Мне также нужно было иконки, чтобы показать, если они присутствовали. У меня полная запись со всем кодом в моем TabControl BackColor исправлении поста .

...