使用VIsual Basic 2015

时间:2017-11-13 16:43:52

标签: vb.net listbox

我想知道是否可以更改列表框中只包含特定字符的行。例如,我有一个名单。我使用的是Visual Basic 2015


约翰
麦克
*史蒂夫
*蒂姆
米歇尔

我想让具有*(或任何特殊字符)的那些转为Red。我可以在代码完全匹配中硬连接并使其变为红色,但我的列表框中将包含动态信息,因此它将一直在变化。我正在标记我想要突出显示具有*的信息的信息。感谢您的时间。这是我试图使用的通用代码的一小部分。

    If ListBox1.Items(e.Index).ToString() = "red.txt" Then
        e.Graphics.FillRectangle(Brushes.red, e.Bounds)
    End If

    e.Graphics.DrawString(ListBox1.Items(e.Index).ToString(), e.Font, Brushes.Black, New System.Drawing.PointF(e.Bounds.X, e.Bounds.Y))
    e.DrawFocusRectangle()

1 个答案:

答案 0 :(得分:2)

处理DrawItem事件并自己绘制每个项目。您必须拥有ListBox1.DrawMode = DrawMode.OwnerDrawFixed

Private Sub ListBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ListBox1.DrawItem
    Dim s As ListBox = CType(sender, ListBox)
    If e.Index < 0 Then Exit Sub
    Dim t = s.Items(e.Index).ToString()
    Using g = e.Graphics
        e.DrawBackground()
        If t.Contains("*"c) Then ' your custom condition
            g.FillRectangle(New SolidBrush(Color.Red), e.Bounds)
        End If
        g.DrawString(t, e.Font, New SolidBrush(e.ForeColor), New Point(e.Bounds.X, e.Bounds.Y))
        e.DrawFocusRectangle()
    End Using
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ListBox1.DrawMode = DrawMode.OwnerDrawFixed
End Sub