+1  A: 

If you're already using the right bounding box, I'd write a function that simply injected '\n's.

overslacked
A: 

Yes, by using the escape character of \n (new line), it will force down. However, if you enter the \n within the visual designer, it will put text as \n thinking you meant to have the actual punctuation backslash character and not the escape character of newline.

DRapp
+6  A: 

Just split the string into characters and draw each one adding the line height of your font to your Y-axis variable:

    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);
    }
scottm
I like this because it does allow you to easily customize the height of each letter; however, you aren't disposing brush in this example. In real life, you'd also want to render to a buffer when needed and simply copy from the buffer in the OnPaint.
overslacked
good point, I added the object disposal
scottm
+3  A: 

Here is an example project that does vertical Text. Also has some comments about text alignment.

From the example, you can use the StringAlignment.Center to center the characters and pass it to the last parameter of the DrawString call.

    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;
        }
    }
SwDevMan81
didn't know you could specify alignment that way!
scottm