добавить иконку в список vb.net - PullRequest
0 голосов
/ 17 марта 2011

пожалуйста,

как нарисовать изображение в событии listbox_DrawItem с левой стороны

я уже прочитал этот код , но мне это не помогает

Dim targetsize As New Size(16, 16)
Dim img As Image = Nothing
img = My.Resources._error
e.Graphics.DrawImage(img, targetsize)
e.Graphics.DrawString(lsbLog.Items(e.Index).ToString(), _
                              e.Font, mybrush, e.Bounds, StringFormat.GenericDefault)

это мой текущий код

РЕДАКТИРОВАТЬ

я добавил ваш код с другим кодом, и я получил искаженный текст

эточасть кода в событии DrawItem

'//Here it draws the border depeding on it's state (the listbox item)
        e.Graphics.DrawRectangle(myPen, e.Bounds.X + 16, e.Bounds.Y, _
                                 e.Bounds.Width - 16, e.Bounds.Height)
        Using b As New SolidBrush(e.ForeColor)
            e.Graphics.DrawString(lsbLog.GetItemText(lsbLog.Items(e.Index)), e.Font, b, e.Bounds)
        End Using
        e.Graphics.DrawImage(img, New Rectangle(e.Bounds.Width - 15, e.Bounds.Y, 12, 12))
        '// Draw the current item text based on the current 
        '// Font and the custom brush settings.
        e.Graphics.DrawString(lsbLog.Items(e.Index).ToString(), e.Font, mybrush, _
                               New Rectangle(e.Bounds.X - 20, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height), _
                               StringFormat.GenericDefault)

Это код в событии MeasureItem

 Private Sub lsbLog_MeasureItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MeasureItemEventArgs) Handles lsbLog.MeasureItem
        Dim g As Graphics = e.Graphics
        'We will get the size of the string which we are about to draw,
        'so that we could set the ItemHeight and ItemWidth property
        Dim size As SizeF = g.MeasureString(lsbLog.Items.Item(e.Index).ToString, Me.Font, _
        lsbLog.Width - (5 + SystemInformation.VerticalScrollBarWidth))
        e.ItemHeight = CInt(size.Height) + 5
        e.ItemWidth = CInt(size.Width) + 5
    End Sub

Я получаю искаженный текст и изображение

I get a garbled image

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Два момента обращают мое внимание:

  • Вы установили DrawMode на DrawMode.OwnerDrawFixed или DrawMode.OwnerDrawVariable, как указано в документации ?

  • Вы, кажется, рисуете текст прямо над изображением. Почему вы используете e.Bounds в DrawString вместо прямоугольника, который начинается немного вправо? Например. что-то вроде:

    Dim rect As New Rectangle(e.Bounds.X + 16, e.Bounds.Y, _
                              e.Bounds.Width - 16, e.Bounds.Height)
    ' use rect instead of e.Bounds in DrawString
    

Кстати, не забывайте звонить DrawBackground и DrawFocusRectange, как видно из примера в документации .

0 голосов
/ 20 декабря 2013

попробуйте этот связанный пост, вам нужно всего лишь отредактировать немного кода, в зависимости от размера шрифта, он мне нужен только с размером шрифта 8,25pt, когда размер шрифта больше, значок не работает выровнены по центру высоты шрифта

Подсветка элемента списка при наведении мыши на элемент

...