设置TabPage标题颜色

问候,

我有一个选项卡控件,我希望有一个选项卡的文本颜色在事件中更改。 我已经find像C#的TabPage颜色事件和C#Winform的答案:如何设置一个TabControl的基本颜色(而不是页面),但使用这些设置所有的颜色,而不是一个。

所以我希望有一种方法来实现这个标签,我希望改变为一种方法,而不是一个事件?

就像是:

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

如果要为选项卡着色,请尝试以下代码:

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

对于读取此的WinForms用户 – 只有在将选项卡控件的DrawMode设置为OwnerDrawFixed时才起作用 – 如果将DrawItem事件设置为“正常”,则不会触发DrawItem事件。

为了增加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

特别感谢这个精彩的博客文章 ,介绍了如何在表单上旋转文本。