Установить цвет заголовка вкладки
Привет,
У меня есть элемент управления вкладкой, и я хочу, чтобы на 1 вкладке был изменен цвет текста в событии.
Я нашел ответы, например С# - событие цвета вкладки
и С# Winform: как установить базовый цвет TabControl (а не вкладку)
но с использованием этих наборов все цвета вместо одного.
Итак, я надеялся, что есть способ реализовать это с помощью закладки, которую я хочу изменить как метод вместо события?
Что-то вроде:
public void SetTabPageHeaderColor(TabPage page, Color color)
{
//Text Here
}
Ответы
Ответ 1
Если вы хотите покрасить вкладки, попробуйте следующий код:
this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
this.tabControl1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl1_DrawItem);
private Dictionary<TabPage, Color> TabColors = new Dictionary<TabPage, Color>();
private void SetTabHeader(TabPage page, Color color)
{
TabColors[page] = color;
tabControl1.Invalidate();
}
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
//e.DrawBackground();
using (Brush br = new SolidBrush (TabColors[tabControl1.TabPages[e.Index]]))
{
e.Graphics.FillRectangle(br, e.Bounds);
SizeF sz = e.Graphics.MeasureString(tabControl1.TabPages[e.Index].Text, e.Font);
e.Graphics.DrawString(tabControl1.TabPages[e.Index].Text, e.Font, Brushes.Black, e.Bounds.Left + (e.Bounds.Width - sz.Width) / 2, e.Bounds.Top + (e.Bounds.Height - sz.Height) / 2 + 1);
Rectangle rect = e.Bounds;
rect.Offset(0, 1);
rect.Inflate(0, -1);
e.Graphics.DrawRectangle(Pens.DarkGray, rect);
e.DrawFocusRectangle();
}
}
Ответ 2
Для пользователей WinForms, читающих это - это ТОЛЬКО работает, если вы установили элемент управления вкладками DrawMode на OwnerDrawFixed - событие DrawItem никогда не срабатывает, если оно установлено в Normal.
Ответ 3
Чтобы добавить к Fun Mun Pieng ответ, который прекрасно работает на вкладках "Горизонтальные", если вы должны использовать вкладки "Вертикаль" (например, я был), вам понадобится что-то вроде этого:
private void tabControl2_DrawItem(object sender, DrawItemEventArgs e)
{
using (Brush br = new SolidBrush(tabColorDictionary[tabControl2.TabPages[e.Index]]))
{
// Color the Tab Header
e.Graphics.FillRectangle(br, e.Bounds);
// swap our height and width dimensions
var rotatedRectangle = new Rectangle(0, 0, e.Bounds.Height, e.Bounds.Width);
// Rotate
e.Graphics.ResetTransform();
e.Graphics.RotateTransform(-90);
// Translate to move the rectangle to the correct position.
e.Graphics.TranslateTransform(e.Bounds.Left, e.Bounds.Bottom, System.Drawing.Drawing2D.MatrixOrder.Append);
// Format String
var drawFormat = new System.Drawing.StringFormat();
drawFormat.Alignment = StringAlignment.Center;
drawFormat.LineAlignment = StringAlignment.Center;
// Draw Header Text
e.Graphics.DrawString(tabControl2.TabPages[e.Index].Text, e.Font, Brushes.Black, rotatedRectangle, drawFormat);
}
}
Я повторю то, что сделал ROJO1969, если это в WinForms - тогда вы должны установить DrawMode в OwnerDrawFixed.
Особая благодарность за эту замечательную запись в блоге, в которой описано, как сделать поворот текста в форме.