【问题标题】:Justify text with DrawString right -and- left使用 DrawString 左右对齐文本
【发布时间】:2012-06-09 00:07:15
【问题描述】:

假设我有 200 像素的空间,我想在其中绘制两个字符串: - 第一个字符串应该左对齐 - 正确的第二个字符串应该是右对齐的 - 但如果它们都不适合则不要重叠(然后按照我的 String.Trimming 选项执行)

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

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

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

我会得到类似的东西

"first              second"

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

【问题讨论】:

    标签: c# winforms gdi+ gdi drawstring


    【解决方案1】:

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

    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);
    }
    

    【讨论】:

    • 除非我遗漏了什么,这只是在一个矩形中绘制文本。我结束了两次 MeasureString 调用并自己处理,但我认为您的回答与我的问题的具体情况无关。
    • @Dave - 传入 TextRenderer 的 TextFormatFlags 指定要绘制的文本的对齐/对齐方式(垂直和水平) - 在边界矩形内。它回答了您关于证明文本合理性的部分问题。但是,此解决方案不考虑可能的重叠问题(您问题的另一部分),因此在您的情况下,使用 MeasureString 变得有用(与此解决方案结合使用)。
    • Horizo​​ntalLeft 不是 TextFormatFlags 的成员
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多