我有一个有四个标签的表单我希望每个标签都是不同的颜色。我唯一能在互联网上找到的是如何更改所选标签的颜色,其余标签保持原始颜色。我没有发现任何东西给每个标签赋予自己的颜色。我目前的代码是。
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
答案 0 :(得分:4)
您需要做两件事:
首先是更改TabControl的DrawMode并将其设置为OwnerDrawFixed
第二个是处理TabControl DrawItem事件
以下是一个例子:
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
这就是它的样子(我只更改前三个标签页的标签颜色,其他可以通过添加新案例来轻松完成选择案例)
答案 1 :(得分:-1)
TabControl1是否是您通过设计器添加到表单的Tab控件?为什么不在每个选项卡中设置TabBackColor属性?
如果没有(你必须通过代码完成),只需使用一个循环来循环TabControl1的标签页集合(TabControl1.TabPages)中的每个标签,并为每个标签设置TabBackColor属性。