5

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

4

4 回答 4

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);
    }
于 2009-10-05T17:01:11.833 回答
3

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

在示例中,您可以使用 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;
        }
    }
于 2009-10-05T17:14:52.167 回答
1

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

于 2009-10-05T16:49:37.083 回答
0

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

于 2009-10-05T16:54:01.600 回答