Улучшите способ отрисовки подэлементов в 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
метод, но он не кажется настолько обширным - вероятно, отбивная.