Легко нарисовать повернутый текст на форме в C#

Пример Нарисовать повернуть текст в C# показывает, как рисовать повернуть текст. К сожалению, этот метод требует, чтобы вы использовали код во время выполнения для размещения текста. Это не слишком сложно, но неудобно, если вы пытаетесь нарисовать повернутый текст в форме.

В этом примере вы можете использовать элементы управления Label, чтобы определить, где должен располагаться повернутый текст. Во время разработки добавьте элементы управления Label в форму, чтобы указать, где должен быть размещен повернутый текст. Вы можете установить AutoSize = False и BorderStyle = FixedSingle для элементов Label, чтобы упростить их расположение.

Следующий DrawSidewaysText метод рисует вращающийся текст внутри заданного Rectangle. Он использует структуру StringFormat, чтобы определить, как текст расположен внутри Rectangle.

// Нарисуйте боковой текст в указанном прямоугольнике.
private void DrawSidewaysText(Graphics gr, Font font,
    Brush brush, Rectangle bounds, StringFormat string_format,
    string txt)
{
    // Создаем поворот прямоугольника в начале координат.
    Rectangle rotated_bounds = new Rectangle(
        0, 0, bounds.Height, bounds.Width);

    // Поворот.
    gr.ResetTransform();
    gr.RotateTransform(-90);

    // Переместите, чтобы переместить прямоугольник в правильное положение.
    gr.TranslateTransform(bounds.Left, bounds.Bottom,
        MatrixOrder.Append);

    // Рисуем текст.
    gr.DrawString(txt, font, brush, rotated_bounds, string_format);
}

Сначала метод создает новый Rectangle с теми же размерами, что и оригинальный, повернутый на 90 градусов, и его верхний левый угол в начале координат (0, 0).

Код сбрасывает преобразование объекта Graphics и поворачивает его на -90 градусов. Затем он добавляет перевод для перемещения теперь повернутого прямоугольника в нужное конечное положение (где Rectangle с именем bounds).

Код сбрасывает преобразование объекта Graphics и поворачивает его на -90 градусов. Затем он добавляет перевод для перемещения теперь повернутого прямоугольника в нужное конечное положение (где Rectangle с именем bounds).

...

Когда запускается примерная программа, он использует следующий код, чтобы скрыть элементы управления Label, которые позиционируют повернутый текст.

// Скрыть метки, которые позиционируют повернутый текст.
private void Form1_Load(object sender, EventArgs e)
{
    lblRotated1.Visible = false;
    lblRotated2.Visible = false;
    lblRotated3.Visible = false;
}

В примерной программе используется следующий обработчик событий Paint для рисования повернутого текста.

// Нарисуйте повернутый текст.
private void Form1_Paint(object sender, PaintEventArgs e)
{
    using (StringFormat string_format = new StringFormat())
    {
        string_format.Alignment = StringAlignment.Center;
        string_format.LineAlignment = StringAlignment.Center;

        e.Graphics.TextRenderingHint =
            TextRenderingHint.AntiAliasGridFit;
        DrawSidewaysText(e.Graphics, Font, Brushes.Black,
            lblRotated1.Bounds, string_format, "Row 1");
        DrawSidewaysText(e.Graphics, Font, Brushes.Black,
            lblRotated2.Bounds, string_format, "Row 2");
        DrawSidewaysText(e.Graphics, Font, Brushes.Black,
            lblRotated3.Bounds, string_format, "Row 3");
    }
}

Этот код создает структуру StringFormat, которая центрирует текст и устанавливает свойство TextRenderingHint объекта Graphics объекта AntiAliasGridFit на дают хороший результат. В этом примере повернутый текст выглядит немного пикселизованным. Результат лучше с большими шрифтами.

Источник: http://csharphelper.com/blog/2017/01/easily-draw-rotated-text-on-a-form-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector