Улучшите способ отрисовки подэлементов в ListView, чтобы упростить внешний вид Windows

Я хотел бы улучшить свой рисунок, чтобы написать те ... символы, которые по умолчанию окна Listview рисует в конце каждой строки подэлемента при изменении размера столбца, как вы можете видеть в этом видео:

http://www.youtube.com/watch?v=J8LghvmLB4E

Это код, который я использую для рисования подэлементов:

    Dim bounds As Rectangle = e.Bounds
    bounds.X += 5
    bounds.Width -= 5

    Select Case e.Header.TextAlign

        Case HorizontalAlignment.Left

            TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font,
                                  bounds, e.SubItem.ForeColor,
                                  TextFormatFlags.Left)

        Case HorizontalAlignment.Center

            TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font,
                                  bounds, e.SubItem.ForeColor,
                                  TextFormatFlags.GlyphOverhangPadding Or TextFormatFlags.HorizontalCenter)

        Case HorizontalAlignment.Right
            TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font,
                                  bounds, e.SubItem.ForeColor,
                                  TextFormatFlags.Right)

    End Select

1 ответ

Решение

Я думаю TextRenderer может быть неправильный подход для этого. Если вы используете DrawString одна из перегрузок включает в себя StringFormat аргумент:

Graphics.DrawString(String, System.Drawing.Font, Drawing.Brush,
              Drawing.RectangleF, Drawing.StringFormat)

Вы можете создать StringFormat контролировать, как текст отображается, и один из вариантов StringTrimming что в свою очередь позволяет вам указать ellipsis ("..."). Это:

    StringTrimming.EllipsisCharacter
    StringTrimming.EllipsisPath
    StringTrimming.EllipsisWord
    StringTrimming.Word         ' just chops at a word

Поиграйте с ними, чтобы увидеть, какой из них вам больше нравится.

Я не очень много использовал TextRenderer, но одна его перегрузка включает TextFormatFlags что позволяет многоточие (EndEllipsis). Я не знаю, как он форматируется иначе, чем StringFormat метод, но он не кажется настолько обширным - вероятно, отбивная.

Другие вопросы по тегам