使用DrawString左右对齐文本

时间:2012-06-04 22:43:21

标签: c# winforms gdi+ gdi drawstring

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

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

想象一下\ l和\ r \ n是逃避这样做的,然后我可以说

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

我最终会找到像

这样的东西
"first              second"

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

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

  1. 在左侧字符串上调用MeasureString
  2. 在右侧字符串上调用MeasureString
  3. 画左字符串,左对齐
  4. 如果两个字符串的宽度之和小于可用空间的宽度,则右对齐绘制右字符串。
  5. 非常简单,虽然我希望框架中有一些东西可以帮我完成工作。