Private Sub filllistboxwithcolors()
Me.ListBox1.DrawMode = DrawMode.OwnerDrawFixed
Me.ListBox1.ItemHeight = 24
'避免闪烁
Me.ListBox1.BeginUpdate()
ListBox1.Items.Clear()
Dim pi As Reflection.PropertyInfo
For Each pi In GetType(Color).GetProperties(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Static)
Me.ListBox1.Items.Add(pi.Name)
Next
ListBox1.EndUpdate()
End Sub
Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
Dim rect As Rectangle = e.Bounds '每一项的边框
If e.State And DrawItemState.Selected Then
e.Graphics.FillRectangle(SystemBrushes.Window, rect)
End If
Dim colorname As String = ListBox1.Items(e.Index)
Dim b As New SolidBrush(Color.FromName(colorname))
rect.Inflate(-16, -2)
e.Graphics.FillRectangle(b, rect)
e.Graphics.DrawRectangle(Pens.Black, rect)
Dim b2 As
Brush
If CInt(b.Color.R) + CInt(b.Color.G) + CInt(b.Color.B) > 128 * 3 Then
b2 = Brushes.Black
Else
b2 = Brushes.White
End If
e.Graphics.DrawString(colorname, Me.ListBox1.Font, b2, rect.X, rect.Y)
End Sub