2013-12-17 1 views
0

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

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 
+0

Мне нравится видеть огромное количество времени, которое вы тратите на попытку изобретать колесо, потому что вы не обратили внимание на мой совет по использованию WPF (который уже имеет все эти встроенные функции) –

+0

Что именно проблема с ними? как стандартный метод Windows ужасно неадекватен? – Plutonix

+0

@HighCore хорошо спасибо за иронию ?, но я не знаю XAML. И каково это имя функции в WPF? – ElektroStudios

ответ

1

Я думаю, TextRenderer может быть неправильно approac h для этого. Если вы используете 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, но он не выглядит столь обширным - вероятно, отбивной.

+0

'TextFormatFlags.EndEllipsis' выполнил задание !, я не использую' DrawString', потому что вычерченные строки вызывают раздражающий эффект popping при изменении размера, лучше использовать 'TextRenderer' хотя бы для этого – ElektroStudios

Смежные вопросы