TEC C TEC C - 1 year ago 102
Vb.net Question

How do I change the color of each tab?

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)


'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

Answer Source

There are two things that you need to do:

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


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