2008-09-15 13 views
0

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

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

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

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

+0

Спрашивается, почему MS сделала что-то немного неопровержимое. Вы должны изменить свой вопрос. – GEOCHET 2008-09-15 21:45:23

ответ

1

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

2

Решение в блоге Раджеша действительно полезно, но оно окрашивает только вкладку элемента управления. В моем случае у меня был 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) 

... 

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

0

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

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

+1

Большое спасибо за сохранение этого сообщения в блоге. О, подождите, нет, вы этого не сделали. – 2015-10-01 18:50:23