如何更改每个标签的颜色?

时间:2022-01-23 11:40:18

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

2 个解决方案

#1


There are two things that you need to do:

您需要做两件事:

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

首先是更改TabControl的DrawMode并将其设置为OwnerDrawFixed

如何更改每个标签的颜色?

And the second is to handle the TabControl DrawItem event

第二个是处理TabControl DrawItem事件

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)

这就是它的样子(我只更改前三个标签页的标签颜色,其他可以通过添加新案例来轻松完成选择案例)

如何更改每个标签的颜色?

#2


Is TabControl1 a Tab control you are adding to the form via the designer? Why not just set the TabBackColor property for each tab when you create it there?

TabControl1是否是通过设计器添加到表单的Tab控件?为什么不在每个选项卡上创建TabBackColor属性?

If not (you do have to do it via code), just use a loop to cycle through each tab in the TabControl1's collection of tab pages (TabControl1.TabPages) and set the TabBackColor property for each there.

如果没有(您必须通过代码执行此操作),只需使用循环来循环TabControl1的选项卡页面集合(TabControl1.TabPages)中的每个选项卡,并为每个选项卡设置TabBackColor属性。

#1


There are two things that you need to do:

您需要做两件事:

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

首先是更改TabControl的DrawMode并将其设置为OwnerDrawFixed

如何更改每个标签的颜色?

And the second is to handle the TabControl DrawItem event

第二个是处理TabControl DrawItem事件

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)

这就是它的样子(我只更改前三个标签页的标签颜色,其他可以通过添加新案例来轻松完成选择案例)

如何更改每个标签的颜色?

#2


Is TabControl1 a Tab control you are adding to the form via the designer? Why not just set the TabBackColor property for each tab when you create it there?

TabControl1是否是通过设计器添加到表单的Tab控件?为什么不在每个选项卡上创建TabBackColor属性?

If not (you do have to do it via code), just use a loop to cycle through each tab in the TabControl1's collection of tab pages (TabControl1.TabPages) and set the TabBackColor property for each there.

如果没有(您必须通过代码执行此操作),只需使用循环来循环TabControl1的选项卡页面集合(TabControl1.TabPages)中的每个选项卡,并为每个选项卡设置TabBackColor属性。