VB .Net为列表框中的某些项目更改了前景色

时间:2014-08-27 11:49:26

标签: vb.net listbox listboxitem

我可以使用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

1 个答案:

答案 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)