Легко нарисовать повернутый текст на форме в 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 на дают хороший результат. В этом примере повернутый текст выглядит немного пикселизованным. Результат лучше с большими шрифтами.
