我想知道是否可以更改列表框中只包含特定字符的行。例如,我有一个名单。我使用的是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()
答案 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