Asi bych si vytvořil vlastní listbox, ale jinak se kreslí v události OnDrawItem při změněném DrawModu.
''' <summary>
''' ListBox s podbarveným výběrem ActiveColor barvou
''' </summary>
''' <remarks></remarks>
Public Class UserListBox : Inherits ListBox
Public Sub New()
'Nastavení DrawModu / všechny položky mají stejnou velikost
Me.DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed
End Sub
Protected Overrides Sub OnDrawItem(ByVal e As System.Windows.Forms.DrawItemEventArgs)
If e.Index = Me.SelectedIndex Then
'jiné pozadí
e.Graphics.FillRectangle(New SolidBrush(Me.ActiveColor), e.Bounds)
Else
'standardní vykreslení pozadí položky
e.DrawBackground()
End If
'vykreselní textu
e.Graphics.DrawString(Me.Items(e.Index).ToString(), _
e.Font, New SolidBrush(Me.ForeColor), e.Bounds, StringFormat.GenericDefault)
MyBase.OnDrawItem(e)
End Sub
'Po změně indexu překreslit
Protected Overrides Sub OnSelectedIndexChanged(ByVal e As System.EventArgs)
MyBase.OnSelectedIndexChanged(e)
Me.Invalidate()
End Sub
'Barva vybraného itemu
Private _activeColor As Color
Public Property ActiveColor() As Color
Get
Return Me._activeColor
End Get
Set(ByVal value As Color)
Me._activeColor = value
Me.Invalidate()
End Set
End Property
End Class
|