【问题标题】:Drawing vertically stacked text in WinForms在 WinForms 中绘制垂直堆叠的文本
【发布时间】:2009-10-05 16:46:39
【问题描述】:

最好使用Graphics对象,如何绘制一个字符串,使字符仍然正常定向,但垂直堆叠?

【问题讨论】:

  • 对齐怎么样?居中对齐还是其他?
  • 我不得不从您的帖子中删除图片,因为 ImageShack 已将其删除并替换为广告。请参阅meta.stackexchange.com/q/263771/215468 了解更多信息。如果可能,您最好重新上传它们。谢谢!

标签: c# .net winforms text system.drawing


【解决方案1】:

只需将字符串拆分为字符并绘制每个字符,并将字体的行高添加到 Y 轴变量:

    protected override void OnPaint(PaintEventArgs e)
    {
        float x = 10.0F;
        float y = 10.0F;

        string drawString = "123";

        using(SolidBrush brush = new SolidBrush(Color.Black))
        using (Font drawFont = new Font("Arial", 16))
        {
            foreach (char c in drawString.ToCharArray())
            {
                PointF p = new PointF(x, y);
                e.Graphics.DrawString(c.ToString(), drawFont, brush, p);

                y += drawFont.Height;
            }
        }
        base.OnPaint(e);
    }

【讨论】:

  • 我喜欢这个,因为它确实可以让您轻松自定义每个字母的高度;但是,在此示例中您没有处理画笔。在现实生活中,您还希望在需要时渲染到缓冲区并简单地从 OnPaint 中的缓冲区复制。
【解决方案2】:

Here 是一个做垂直文本的示例项目。还有一些关于文本对齐的cmets。

从示例中,您可以使用 StringAlignment.Center 将字符居中并将其传递给 DrawString 调用的最后一个参数。

    protected override void OnPaint(PaintEventArgs e) 
    { 
        float x = 10.0F;
        float y = 10.0F;
        Font drawFont = new Font("Arial", 16);
        SolidBrush drawBrush = new SolidBrush(Color.Black);
        StringFormat sf = new StringFormat();
        sf.Alignment = StringAlignment.Center;
        foreach (char c in Text.ToCharArray())
        { 
            PointF p = new PointF(x, y);
            e.Graphics.DrawString(c.ToString(), drawFont, drawBrush, p, sf);
            y += drawFont.Height;
        }
    }

【讨论】:

  • 不知道你可以这样指定对齐方式!
【解决方案3】:

如果您已经在使用正确的边界框,我会编写一个简单地注入 '\n's 的函数。

【讨论】:

    【解决方案4】:

    是的,通过使用 \n (换行符)的转义字符,它将强制关闭。但是,如果您在可视化设计器中输入 \n,它会将文本视为 \n,认为您的意思是具有实际的标点符号反斜杠字符,而不是换行符的转义字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多