Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I change the color of each tab?

Tags:

vb.net

I have a form that has four tabs on it I would like each tab to be a different color. The only thing I have been able to find on the internet is how to change the color of the selected tab and the rest of the tabs stay the original color. I have not found anything to give each tab its own color. The code I currently have is.

Private Sub TabControl1_DrawItem(sender As System.Object, e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem

        Dim g As Graphics = e.Graphics
        Dim tp As TabPage = TabControl1.TabPages(e.Index)
        Dim br As Brush
        Dim sf As New StringFormat

        Dim r As New RectangleF(e.Bounds.X, e.Bounds.Y + 2, e.Bounds.Width, e.Bounds.Height - 2)

        sf.Alignment = StringAlignment.Center

        Dim strTitle As String = tp.Text

        If TabControl1.SelectedIndex = e.Index Then

            'this is the background color of the tabpage header
            br = New SolidBrush(Color.LightSteelBlue) ' chnge to your choice
            g.FillRectangle(br, e.Bounds)

            'this is the foreground color of the text in the tab header
            br = New SolidBrush(Color.Black) ' change to your choice
            g.DrawString(strTitle, TabControl1.Font, br, r, sf)

        Else

            'these are the colors for the unselected tab pages 
            br = New SolidBrush(Color.Blue) ' Change this to your preference
            g.FillRectangle(br, e.Bounds)
            br = New SolidBrush(Color.Black)
            g.DrawString(strTitle, TabControl1.Font, br, r, sf)

        End If
    End Sub
like image 714
TEC C Avatar asked Oct 27 '25 02:10

TEC C


1 Answers

There are two things that you need to do:

First is to change the DrawMode of the TabControl and set it to OwnerDrawFixed

drawmode

And the second is to handle the TabControl DrawItem event

Here is an example:

 Private Sub TabControl1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles TabControl1.DrawItem
    Select Case e.Index
        Case 0
            e.Graphics.FillRectangle(New SolidBrush(Color.Red), e.Bounds)
        Case 1
            e.Graphics.FillRectangle(New SolidBrush(Color.Blue), e.Bounds)
        Case 2
            e.Graphics.FillRectangle(New SolidBrush(Color.Magenta), e.Bounds)

    End Select

    Dim paddedBounds As Rectangle = e.Bounds
    paddedBounds.Inflate(-2, -2)
    e.Graphics.DrawString(TabControl1.TabPages(e.Index).Text, Me.Font, SystemBrushes.HighlightText, paddedBounds)


End Sub

And here is what it looks like (I change the tab colors of the first three tab pages only, the others can be done easily by adding new cases to select case)

tab colors

like image 198
alainlompo Avatar answered Oct 29 '25 15:10

alainlompo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!