我可以使用DrawItem事件为列表框项设置forecolor。但是,例如,如果我的列表包含一个红色项目,一旦我添加了所需的绿色下一个,我就无法保留红色的第一个项目。假设我可以设置颜色,但我需要先获得项目颜色。如何获得列表框项目的前景色?谢谢。
Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
e.DrawBackground()
If e.Index = listBoxSize Then
e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, Brushes.Green, e.Bounds.X, e.Bounds.Y)
Else
Using br = New SolidBrush(e.ForeColor)
e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, br, e.Bounds.X, e.Bounds.Y)
End Using
End If
e.DrawFocusRectangle()
End Sub
答案 0 :(得分:1)
您可以使用Dictionary(TKey, TValue)
类来存储所列项目的颜色
Dim colors As New Dictionary(Of Integer, Color)
Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
e.DrawBackground()
Dim clr As Color = e.ForeColor
If e.Index = listBoxSize Then
clr = Colors.Green
Using br = New SolidBrush(clr)
e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, br, e.Bounds.X, e.Bounds.Y)
End Using
colors.Add(e.Index, clr)
e.DrawFocusRectangle()
End Sub
现在您可以通过列表索引来检索颜色。
Dim clr Color = colors(listBox1.SelectedIndex)