Установить цвет заголовка TabPage - PullRequest
20 голосов
/ 17 марта 2011

Приветствия,

У меня есть элемент управления вкладками, и я хочу, чтобы на одной из вкладок был изменен цвет текста события.Я нашел ответы вроде C # - событие цвета TabPage и C # Winform: как установить базовый цвет для TabControl (не для вкладки) , но с использованием этих наборов все цвета вместо одного,

Итак, я надеялся, что есть способ реализовать это с помощью вкладки, которую я хочу изменить как метод вместо события?

Что-то вроде:

public void SetTabPageHeaderColor(TabPage page, Color color) 
{
    //Text Here
}

Ответы [ 3 ]

26 голосов
/ 17 марта 2011

Если вы хотите покрасить вкладки, попробуйте следующий код:

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();
    }
}
17 голосов
/ 30 июня 2012

Для пользователей WinForms:

6 голосов
/ 23 декабря 2013

Чтобы добавить к 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 .

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

...