Establecer el color del encabezado de TabPage

Saludos,

Tengo un control de tabs y quiero tener 1 de las tabs para cambiar su color de texto en un evento. He encontrado respuestas como C # – Evento Color de TabPage y C # Forma de cambio: Cómo establecer el Color base de un Control de Tabulación (no el tabulador) pero al usar estos establece todos los colores en lugar de uno.

Entonces, ¿esperaba que hubiera una forma de implementar esto con la pestaña que deseo cambiar como método en lugar de un evento?

Algo como:

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

Si desea colorear las tabs, intente con el siguiente código:

 this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed; this.tabControl1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl1_DrawItem); private Dictionary TabColors = new Dictionary(); 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(); } } 

Para usuarios de WinForms que lean esto, esto SOLAMENTE funciona si configuras el DrawMode de control de tabs en OwnerDrawFixed; el evento DrawItem nunca se dispara si está configurado en Normal.

Para agregar a la respuesta de Fun Mun Pieng , que funciona maravillosamente en las tabs Horizontales , si usaras las tabs Verticales (como yo) entonces necesitarías algo como esto:

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

Me haré eco del punto que hizo ROJO1969 , si esto está en WinForms – entonces debe establecer DrawMode en OwnerDrawFixed .

Un agradecimiento especial a esta maravillosa entrada de blog que describió cómo hacer una rotación de texto en un formulario.