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