Owner-Drawn Colored ListBox

I'm trying to develop an Owner-Drawn ListBox and here is what i did :

I'm trying to apply a new property called "AlternatingItemsCellStyle", like the one in the DataGridView Control , but i have some problems implementing it.
I have some classes like "ListBoxCellStyle" which have some properties like -- forecolor, backcolor, selectionforecolor, selectionbackcolor and font property.
i also implement a type converter for that cellstyle and a custom item to be added to the listbox
but that code doesn't work when i added some items to the list nothing changed.
I attached a test form to test that list but , every time i'm trying to run the form i get a strange error messagsays 'Assembly 'C:\Documents and Settings\~~~\Desktop\~~~\~~~\obj\Debug\~~~~.dll' doesn't contain any UserControl types.'


<ToolboxBitmap(GetType(ListBox))> _
<DefaultProperty("AlternatingItemsCellStyle")> _
<DefaultEvent("SelectedIndexChanged")> _
Public Class ColoredListBox
    Inherits ListBox
    Private _DrawMode As DrawMode = Windows.Forms.DrawMode.OwnerDrawVariable
    <DefaultValue(GetType(DrawMode), "OwnerDrawVariable")> _
    Public Overloads Property DrawMode() As DrawMode
            Return _DrawMode
        End Get
        Set(ByVal Value As DrawMode)
            _DrawMode = Value
        End Set
    End Property
    Private _AlternatingItemsCellStyle As ListBoxCellStyle = New ListBoxCellStyle
    '<DefaultValue(GetType(ListBoxCellStyle), "(White), (Black), (Maroon), (255, 224, 192), (Tahoma, 8pt)")> _
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
    Public Property AlternatingItemsCellStyle() As ListBoxCellStyle
            Return _AlternatingItemsCellStyle
        End Get
        Set(ByVal Value As ListBoxCellStyle)
            _AlternatingItemsCellStyle = Value
            AddHandler _AlternatingItemsCellStyle.AlternatingCellStyleChanged, AddressOf AlternatingCellStyleChanged
        End Set
    End Property
    Private Sub AlternatingCellStyleChanged(ByVal sender As Object, ByVal e As EventArgs)
    End Sub
    Private Sub ColoredListBox_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem
        Dim List As ListBox = CType(sender, ListBox)
        Dim Item As FormattedListItem = Nothing
        If TypeOf List.Items(e.Index) Is FormattedListItem Then
            Item = CType(List.Items(e.Index), FormattedListItem)
        End If
        Dim Font As Font = Nothing
        Dim ForeColor As Color = Color.Empty
        Dim BackColor As Color = Color.Empty
        Dim SelectionForeColor As Color = Color.Empty
        Dim SelectionBackColor As Color = Color.Empty
        If Item IsNot Nothing Then
            Font = Item.ListBoxItemsStyle.Font
            ForeColor = Item.ListBoxItemsStyle.ForeColor
            BackColor = Item.ListBoxItemsStyle.BackColor
            SelectionForeColor = Item.ListBoxItemsStyle.SelectionForeColor
            SelectionBackColor = Item.ListBoxItemsStyle.SelectionBackColor
            Font = List.Font
            ForeColor = List.ForeColor
            BackColor = List.BackColor
            SelectionForeColor = System.Drawing.SystemColors.HighlightText
            SelectionBackColor = System.Drawing.SystemColors.Highlight
        End If
        Dim ForeBrush As Brush
        Dim BackBrush As Brush
        If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
            ForeBrush = New SolidBrush(SelectionForeColor)
            BackBrush = New SolidBrush(SelectionBackColor)
            ForeBrush = New SolidBrush(ForeColor)
            BackBrush = New SolidBrush(BackColor)
        End If
        e.Graphics.FillRectangle(BackBrush, e.Bounds)
        Dim Text As String = List.Items(e.Index).ToString
        e.Graphics.DrawString(Text, Font, ForeBrush, e.Bounds.X, e.Bounds.Y)
    End Sub
    Private Sub ColoredListBox_MeasureItem(ByVal sender As Object, ByVal e As System.Windows.Forms.MeasureItemEventArgs) Handles Me.MeasureItem
        Dim List As ListBox = CType(sender, ListBox)
        If (IsPrimeNumber(e.Index)) Then
            Dim MyItem As New FormattedListItem(List.Items(e.Index), Me.AlternatingItemsCellStyle)
            If MyItem.ListBoxItemsStyle.Font IsNot Nothing Then
                List.Items.Insert(e.Index, MyItem)
                e.ItemHeight = MyItem.ListBoxItemsStyle.Font.Height
            End If
        End If
    End Sub
    Private Function IsPrimeNumber(ByVal [Number] As Integer) As Boolean
        Dim TheDouble As Double
        TheDouble = Double.Parse(([Number] / 2))
        If TheDouble.ToString.Contains(".") Then
            Return True
        End If
        Return False
    End Function
End Class

Open in new window

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Éric MoreauSenior .Net ConsultantCommented:

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Project Management

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.