Рисование вертикально сложенного текста в WinForms - PullRequest
5 голосов
/ 05 октября 2009

Желательно, используя объект Graphics, как нарисовать строку, чтобы символы по-прежнему были ориентированы нормально, но располагались вертикально?

Ответы [ 4 ]

7 голосов
/ 05 октября 2009

Просто разбейте строку на символы и нарисуйте каждый из них, добавив высоту строки вашего шрифта в переменную оси 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);
    }
3 голосов
/ 05 октября 2009

Здесь - это пример проекта, который выполняет вертикальный текст. Также есть некоторые комментарии по поводу выравнивания текста.

В этом примере вы можете использовать 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;
        }
    }
1 голос
/ 05 октября 2009

Если вы уже используете правую ограничивающую рамку, я напишу функцию, которая просто вводит '\ n's.

0 голосов
/ 05 октября 2009

Да, используя escape-символ \ n (новая строка), он сбрасывается. Тем не менее, если вы введете \ n в визуальном конструкторе, он будет отображать текст как \ n, думая, что вы должны иметь реальный символ обратной косой черты пунктуации, а не escape-символ новой строки.

...