none
Como cambiar de colores el TabControl RRS feed

  • Pregunta

  • Hola  A TODOS

    Estoy programando en visual studio 2013 .net y estoy usando el TabControl. ¿Como puedo cambiarle de color a los  TabPage1,TabPage2,TabPage3 que estan en la cabecera'.

    Gracias


    guillermo leon rea

    miércoles, 18 de noviembre de 2015 21:03

Respuestas

  • Hola:
    ¿ Te refieres a algo como la imagen ?

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta guille30 viernes, 20 de noviembre de 2015 14:22
    jueves, 19 de noviembre de 2015 8:04
  • //para cambiar el color de los paneles
    tabPage1.BackColor = Color.Aqua;
    tabPage2.BackColor = Color.Orange;
    //para cambiar las cabeceras http://www.codeproject.com/Questions/800016/How-to-change-the-dynamic-tab-page-header-color
    this.tabControl1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl1_DrawItem);

    el evento

    private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
            {
                Graphics g = e.Graphics;
                TabPage tp = tabControl1.TabPages[e.Index];
    
                StringFormat sf = new StringFormat();
                sf.Alignment = StringAlignment.Center;  //optional
    
                // This is the rectangle to draw "over" the tabpage title
                RectangleF headerRect = new RectangleF(e.Bounds.X, e.Bounds.Y + 2, e.Bounds.Width, e.Bounds.Height - 2);
    
                // This is the default colour to use for the non-selected tabs
                SolidBrush sb = new SolidBrush(Color.AntiqueWhite);
    
                // This changes the colour if we're trying to draw the selected tabpage
                if (tabControl1.SelectedIndex == e.Index)
                    sb.Color = Color.Aqua;
    
                // Colour the header of the current tabpage based on what we did above
                g.FillRectangle(sb, e.Bounds);
    
                //Remember to redraw the text - I'm always using black for title text
                g.DrawString(tp.Text, tabControl1.Font, new SolidBrush(Color.Black), headerRect, sf);
            }


    • Editado legolas2024 jueves, 19 de noviembre de 2015 8:05
    • Propuesto como respuesta Karen MalagónModerator jueves, 19 de noviembre de 2015 21:03
    • Marcado como respuesta guille30 lunes, 23 de noviembre de 2015 15:48
    jueves, 19 de noviembre de 2015 8:04
  • Hola:
    En un Form con 1 TabControl, copia y pega el siguiente codigo

    Public Class Form1

        Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem
            Dim g As Graphics = e.Graphics
            Dim _TextBrush As Brush
            ' Get the item from the collection.
            Dim _TabPage As TabPage = TabControl1.TabPages(e.Index)
            ' Get the real bounds for the tab rectangle.
            Dim _TabBounds As Rectangle = TabControl1.GetTabRect(e.Index)
            If (e.State = DrawItemState.Selected) Then
                ' Draw a different background color, and don't paint a focus rectangle.
                _TextBrush = New SolidBrush(Color.Blue)
                g.FillRectangle(Brushes.Yellow, e.Bounds)
            Else
                _TextBrush = New System.Drawing.SolidBrush(e.ForeColor)
                e.DrawBackground()
            End If
            ' Use our own font.
            Dim _TabFont As New Font("Arial", 10.0, FontStyle.Bold, GraphicsUnit.Pixel)
            ' Draw string. Center the text.
            Dim _StringFlags As New StringFormat()
            _StringFlags.Alignment = StringAlignment.Center
            _StringFlags.LineAlignment = StringAlignment.Center
            g.DrawString(_TabPage.Text, _TabFont, _TextBrush, _TabBounds, New StringFormat(_StringFlags))
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta guille30 lunes, 23 de noviembre de 2015 15:48
    lunes, 23 de noviembre de 2015 9:09

Todas las respuestas

  • Hola:
    ¿ Te refieres a algo como la imagen ?

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta guille30 viernes, 20 de noviembre de 2015 14:22
    jueves, 19 de noviembre de 2015 8:04
  • //para cambiar el color de los paneles
    tabPage1.BackColor = Color.Aqua;
    tabPage2.BackColor = Color.Orange;
    //para cambiar las cabeceras http://www.codeproject.com/Questions/800016/How-to-change-the-dynamic-tab-page-header-color
    this.tabControl1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabControl1_DrawItem);

    el evento

    private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
            {
                Graphics g = e.Graphics;
                TabPage tp = tabControl1.TabPages[e.Index];
    
                StringFormat sf = new StringFormat();
                sf.Alignment = StringAlignment.Center;  //optional
    
                // This is the rectangle to draw "over" the tabpage title
                RectangleF headerRect = new RectangleF(e.Bounds.X, e.Bounds.Y + 2, e.Bounds.Width, e.Bounds.Height - 2);
    
                // This is the default colour to use for the non-selected tabs
                SolidBrush sb = new SolidBrush(Color.AntiqueWhite);
    
                // This changes the colour if we're trying to draw the selected tabpage
                if (tabControl1.SelectedIndex == e.Index)
                    sb.Color = Color.Aqua;
    
                // Colour the header of the current tabpage based on what we did above
                g.FillRectangle(sb, e.Bounds);
    
                //Remember to redraw the text - I'm always using black for title text
                g.DrawString(tp.Text, tabControl1.Font, new SolidBrush(Color.Black), headerRect, sf);
            }


    • Editado legolas2024 jueves, 19 de noviembre de 2015 8:05
    • Propuesto como respuesta Karen MalagónModerator jueves, 19 de noviembre de 2015 21:03
    • Marcado como respuesta guille30 lunes, 23 de noviembre de 2015 15:48
    jueves, 19 de noviembre de 2015 8:04
  • Hola J.Carlos Herrero

    Justo eso es lo que estoy  queriendo hacer en mi pagina , me puedes indicar como logarlo .

    Gracias


    guillermo leon rea

    viernes, 20 de noviembre de 2015 14:24
  • Hola:
    En un Form con 1 TabControl, copia y pega el siguiente codigo

    Public Class Form1

        Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem
            Dim g As Graphics = e.Graphics
            Dim _TextBrush As Brush
            ' Get the item from the collection.
            Dim _TabPage As TabPage = TabControl1.TabPages(e.Index)
            ' Get the real bounds for the tab rectangle.
            Dim _TabBounds As Rectangle = TabControl1.GetTabRect(e.Index)
            If (e.State = DrawItemState.Selected) Then
                ' Draw a different background color, and don't paint a focus rectangle.
                _TextBrush = New SolidBrush(Color.Blue)
                g.FillRectangle(Brushes.Yellow, e.Bounds)
            Else
                _TextBrush = New System.Drawing.SolidBrush(e.ForeColor)
                e.DrawBackground()
            End If
            ' Use our own font.
            Dim _TabFont As New Font("Arial", 10.0, FontStyle.Bold, GraphicsUnit.Pixel)
            ' Draw string. Center the text.
            Dim _StringFlags As New StringFormat()
            _StringFlags.Alignment = StringAlignment.Center
            _StringFlags.LineAlignment = StringAlignment.Center
            g.DrawString(_TabPage.Text, _TabFont, _TextBrush, _TabBounds, New StringFormat(_StringFlags))
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta guille30 lunes, 23 de noviembre de 2015 15:48
    lunes, 23 de noviembre de 2015 9:09