يجب عليك أن تتعامل مع الحدث ListBox_DrawItem
و ترسم Item باللون المطلوب
لاتنسي تغيير DrawMode Property
في اللينك التالي ستجد فكرة تغيير اللون بناء علي Index
اللينك
عموما: الحل المثالي انك تقوم ببناء اداة جديدة يتم توريثها من الأداة ListBox و تعيد عملية الرسم في الحدث DrawItem
هذا مثال لكيفية بناء ليست بوكس بسيط و يمكنك التعديل عليه و تطويره
PHP كود :
Public Class BoxList
Inherits ListBox
Public Sub New()
Me.DrawMode = DrawMode.OwnerDrawFixed
Me.ItemHeight = 16
End Sub
Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
e.DrawBackground()
e.DrawFocusRectangle()
' ****************************************************
' يمكنك التحكم في الون من الكود التالي
Dim limeColor As Color = Color.DarkBlue
' يمكنك التحكم في مكان رسم التكست من هنا
Dim indent As Single = 5
' ****************************************************
If e.Index < 0 OrElse e.Index >= MyBase.Items.Count Then
e.Graphics.DrawString(Me.Text, e.Font, New SolidBrush(e.ForeColor), CSng((e.Bounds.Left + indent)), CSng(e.Bounds.Top))
Else
e.Graphics.DrawString(MyBase.Items(e.Index).ToString(), e.Font, New SolidBrush(limeColor), CSng((e.Bounds.Left + indent)), CSng(e.Bounds.Top))
End If
MyBase.OnDrawItem(e)
End Sub
End Class