首頁>Program>source

問候,

我有一个選項卡控制元件,我想让其中一个選項卡的事件颜色更改。 我找到了C#-TabPage颜色事件之類的答案。 和C#winform: 如何設置TabControl(不是標簽頁)的基础颜色 但使用這些設置所有颜色而不是一種颜色.

所以我希望有一種方法可以通過我希望將其更改為方法而非事件的選項卡来實現?

類似的东西:

public void SetTabPageHeaderColor(TabPage page, Color color) 
{
    //Text Here
}
最新回復
  • 5月前
    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();
        }
    }
    

  • 5月前
    2 #

    對於winForms使用者,請阅讀以下內容-仅当將選項卡控制元件的DrawMode設置為OwnerDrawFixed時,此方法才有效-如果將DrawItem事件設置為Normal,則永远不会觸發。

  • 5月前
    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

    特別感谢這篇精彩的博客文章,其中描述了如何在表單上旋轉文字。

  • 正則表達式中的數學運算
  • call:在Javascript中繫結更多已繫結函式的引數