web-dev-qa-db-ja.com

TabPageヘッダーの色を設定

ご挨拶、

タブコントロールがあり、1つのタブでイベントのテキストの色を変更したい。 C#-TabPage Color event および C#Winform:TabPageではなくTabControlのBase Colorを設定する方法 のような答えを見つけましたが、代わりにこれらを使用してすべての色を設定しますひとつの。

だから、イベントの代わりにメソッドとして変更したいタブでこれを実装する方法があることを望んでいましたか?

何かのようなもの:

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

これを読んでいるWinFormsユーザーの場合-これは、タブコントロールのDrawModeをOwnerDrawFixedに設定した場合にのみ動作します-DrawItemイベントがNormalに設定されている場合、決して発生しません。

17
ROJO1969

Fun Mun Piengの回答に追加するには、水平タブで美しく動作しますVertical tabs(私がそうだったように)を使用すると、次のようなものが必要になります。

    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);
        }
    }

これがWinFormsにある場合、ROJO1969が作成したポイントをエコーし​​ます-DrawModeをOwnerDrawFixed

この素晴らしい ブログエントリ に感謝します。これは、フォーム上でテキストのローテーションを行う方法を説明しています。

7
Derek W