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
该博客介绍了如何在VB.NET中创建一个自定义的Listbox控件,使其能够显示颜色并带有颜色预览。通过设置DrawMode为OwnerDrawFixed和调整ItemHeight,然后遍历Color类的公共静态属性填充列表项,并实现DrawItem事件来绘制颜色块和文字,实现了颜色的可视化展示。
398

被折叠的 条评论
为什么被折叠?



