c# winforms colors header tabcontrol

c# - Establecer TabPage Color del encabezado



winforms colors (3)

Para agregar a la respuesta de Fun Mun Pieng que funciona a la perfección en las pestañas horizontales , si utilizas las pestañas verticales (como lo estaba 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 señalado por ROJO1969 , si está en WinForms, entonces debe establecer DrawMode en OwnerDrawFixed .

Gracias especiales a esta maravillosa entrada de blog que describe cómo hacer una rotación de texto en un formulario.

Saludos,

Tengo un control de pestañas y quiero que una de las pestañas cambie el color del texto en un evento. He encontrado respuestas como C # - TabPage Color event y C # Winform: Cómo configurar el Color base de un TabControl (no la pestaña), pero al usar estos se establecen 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 }


Para los usuarios de WinForms que leen esto: esto SOLO funciona si configura el modo de dibujo de su control de pestañas en PropietarioDefinido por Foco: el evento DrawItem nunca se dispara si está configurado en Normal.


Si quieres colorear las pestañas, prueba el siguiente código:

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