0

假设我有 200 像素的空间,我想在其中绘制两个字符串: - 第一个字符串应该左对齐 - 右第二个字符串应该右对齐 - 但如果它们都不适合,则不要重叠(然后做任何我的字符串.修剪选项说)

我是否必须测量每个并手动绘制它,或者 DrawString 是否有某种方式来支持我正在尝试做的事情而无需重新发明轮子?

想象一下 \l 和 \r 是这样做的转义,那么我可以说

graphics.Drawstring("\lfirst\rsecond", ...);

我会得到类似的东西

"first              second"

至少那是我希望发生的事情(我知道 \l 和 \r 不存在)。有办法吗?

4

2 回答 2

3

我忽略了您的标志,而是(大致)向您展示如何对齐文本。很容易挑选出您的文本,将其拆分并绘制为两个单独的字符串!

string text2 = "Use TextFormatFlags and Rectangle objects to"
 + " align text in a rectangle.";

using (Font font2 = new Font("Arial", 12, FontStyle.Bold, GraphicsUnit.Point))
{
    Rectangle rect2 = new Rectangle(150, 10, 130, 140);

    // Create a TextFormatFlags with word wrapping, horizontal center and
    // vertical center specified.
    TextFormatFlags flags = TextFormatFlags.HorizontalLeft |
        TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;

    // Draw the text and the surrounding rectangle.
    TextRenderer.DrawText(e.Graphics, text2, font2, rect2, Color.Blue, flags);
    e.Graphics.DrawRectangle(Pens.Black, rect2);
}
于 2012-06-04T22:48:02.800 回答
1

从长远来看,这就是我最终要做的事情:

  1. 在左字符串上调用 MeasureString
  2. 在正确的字符串上调用 MeasureString
  3. 绘制左字符串,左对齐
  4. 如果两个字符串的宽度之和小于可用空间的宽度,则绘制右对齐的字符串。

非常简单,尽管我希望框架中有一些东西可以为我完成这项工作。

于 2012-06-08T19:56:20.737 回答