Graphics.DrawString прерывание среднего слова - PullRequest
4 голосов
/ 17 августа 2011

Я создал usercontrol, который представляет собой кнопку с некоторыми приятными маленькими функциями.

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

В большинстве случаев это работает нормально, но иногда оно подрезает слово пополам.

Так что это может выглядеть как ..

stackov 
erflow

Вместо

stackoverflow 

(но мелким шрифтом)

Я думал, что был бы StringFormatFlag, который позволил бы мне указать, как осуществляется перенос слов.

Я хочу перенос слов, но не перенос символов.

Спасибо Рич.

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Вместо этого вы можете попробовать использовать TextRenderer:

  TextRenderer.DrawText(e.Graphics,
                        "stackoverflow",
                        this.Font,
                        new Rectangle(10, 10, 32, 32),
                        Color.Black,
                        Color.Empty,
                        TextFormatFlags.WordBreak | TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);

  TextRenderer.DrawText(e.Graphics,
                        "stack overflow",
                        this.Font,
                        new Rectangle(50, 10, 32, 32),
                        Color.Black,
                        Color.Empty,
                        TextFormatFlags.WordBreak | TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);

enter image description here

0 голосов
/ 17 августа 2011

Необходимо указать StringFormatFlags .NoWrap при заполнении свойства StringFormat.FormatFlags .Затем используйте одну из перегрузок DrawString, которая принимает класс StringFormat.Один из следующих трех методов:

DrawString (String, Font, Brush, PointF, StringFormat)

DrawString (String, Font, Brush, RectangleF, StringFormat)

DrawString (строка, шрифт, кисть, один, один, StringFormat)

...