Рисование вертикально сложенного текста в WinForms

Единственное место я использовал Отражательный материал в C#, было в шаблонах "фабрика", где я создаю объекты (в моем случае, сетевых слушателях) на основе информации о конфигурационном файле. Конфигурационный файл предоставил местоположение блоков, название типов в них и любые дополнительные необходимые аргументы. Фабрика взяла этот материал и создала слушателей на основе этого.

5
задан Undo 22 September 2015 в 00:42
поделиться

4 ответа

Просто разделите строку на символы и нарисуйте каждый, добавив высоту строки вашего шрифта к переменной оси 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);
    }
7
ответ дан 13 December 2019 в 19:30
поделиться

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

В этом примере вы можете использовать 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
ответ дан 13 December 2019 в 19:30
поделиться

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

1
ответ дан 13 December 2019 в 19:30
поделиться

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

0
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: