在WinForms中绘制垂直堆叠的文本

时间:2009-10-05 16:46:40

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

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

4 个答案:

答案 0 :(得分:7)

将字符串拆分为字符并绘制每个字符,将字体的行高添加到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);
    }

答案 1 :(得分:3)

Here是一个执行垂直文本的示例项目。还有一些关于文本对齐的评论。

从示例中,您可以使用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;
        }
    }

答案 2 :(得分:1)

如果你已经使用了正确的边界框,我会编写一个只注入'\ n'的函数。

答案 3 :(得分:0)

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