Измерьте обернутую строку - PullRequest
4 голосов
/ 03 февраля 2012

Я пытаюсь создать элемент управления, который в основном позволяет мне рисовать различные строки друг под другом.Однако ширина строк не может быть больше, чем у элемента управления.Чтобы решить эту проблему, я думал о передаче объекта RectangleF в метод Graphics.DrawString.Это обернуло бы строки, которые шире ширины переданного прямоугольника.Хотя это решает проблему невозможности увидеть всю строку, если она слишком большая, существует другая проблема.Если бы я попробовал что-то вроде этого

Graphics g = e.Graphics; // Paint event
g.DrawString(someText, someFont, someBrush, new PointF(0, 0), someRectangleF);
g.DrawString(someMoreText, someFont, someBrush, new PointF(0, 12), someRectangleF);

, проблема была бы в том, что, если someText обернут, третья строка закрашивает текст первого текста, что затрудняет / делает невозможным чтение.

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

1 Ответ

7 голосов
/ 03 февраля 2012

Можно ли использовать метод Graphics.MeasureString , чтобы получить размеры строки и соответственно нарисовать следующую строку?

SizeF size = g.MeasureString(someText, someFont, someRectangleF.Size.Width);
g.DrawString(someText, someFont, someBrush, new PointF(0, 0), someRectangleF);
g.DrawString(someMoreText, someFont, someBrush, new PointF(0, size.Height), someRectangleF);
...