Vb.net 未正确绘制线条-ComboBox.DrawItem事件

Vb.net 未正确绘制线条-ComboBox.DrawItem事件,vb.net,combobox,Vb.net,Combobox,我使用VB.NET中ComboBox控件的DrawItem事件在每个项上绘制几行和一个文本。放下控件后,将正确绘制每个项目的文本,但所有行都将叠加在第一个项目中。当我慢慢向下滚动到最后时,每个项目的文本都正确绘制,但没有线条绘制。当我慢慢向上滚动到开始时,每个项目的文本都正确绘制,线条也正确绘制。当我快速向上或向下滚动时,每个项目的文本都被正确地绘制出来,但线条是成组叠加的。有什么想法吗 链接到显示以下内容的图像: 在这种情况下,图片将有助于您考虑渲染图像和存储位图,以简化事情,并允许您检查代码

我使用VB.NET中ComboBox控件的DrawItem事件在每个项上绘制几行和一个文本。放下控件后,将正确绘制每个项目的文本,但所有行都将叠加在第一个项目中。当我慢慢向下滚动到最后时,每个项目的文本都正确绘制,但没有线条绘制。当我慢慢向上滚动到开始时,每个项目的文本都正确绘制,线条也正确绘制。当我快速向上或向下滚动时,每个项目的文本都被正确地绘制出来,但线条是成组叠加的。有什么想法吗

链接到显示以下内容的图像:


在这种情况下,图片将有助于您考虑渲染图像和存储位图,以简化事情,并允许您检查代码是否正确绘制图像,而不会出现CBO的复杂情况?当然,我只包含了一幅图像。@Proputix,我实现了一个在内存中创建图像的功能,然后将图像分配给每个项目,它就可以工作了。谢谢
Private Sub cbxShape_DrawItem(sender As Object, e As DrawItemEventArgs) Handles cbxShape.DrawItem


    e.DrawBackground()
    With figureTypeList.figureTypes(e.Index)
        Dim n_points As Integer = .vertices.Count
        For i = 0 To n_points - 2
            Dim x1 As Integer = .vertices(i).X * 3000 + e.Bounds.Width / 2
            Dim y1 As Integer = .vertices(i).Y * 3000 + e.Bounds.Height / 2
            Dim x2 As Integer = .vertices(i + 1).X * 3000 + e.Bounds.Width / 2
            Dim y2 As Integer = .vertices(i + 1).Y * 3000 + e.Bounds.Height / 2
            Dim startpoint As New System.Drawing.Point(x1, y1)
            Dim endpoint As New System.Drawing.Point(x2, y2)
            e.Graphics.DrawLine(New System.Drawing.Pen(Brushes.DarkBlue, 2), startpoint, endpoint)
        Next i
    End With

    Dim size As Single = 10
    Dim myFont As System.Drawing.Font = _
        New System.Drawing.Font(FontFamily.GenericSansSerif, size, FontStyle.Bold)

    Dim rectangle As Rectangle = New Rectangle(2, e.Bounds.Top + 2, _
        8 * e.Bounds.Height, e.Bounds.Height - 4)

    e.Graphics.DrawString(figureTypeList.figureTypes(e.Index).name, myFont, _
                          System.Drawing.Brushes.Black, _
                          New RectangleF(e.Bounds.X + rectangle.Width, e.Bounds.Y, _
                          e.Bounds.Width, e.Bounds.Height))
    e.DrawFocusRectangle()
End Sub