Поворот текста метки и кнопок на 90 градусов - PullRequest
0 голосов
/ 01 июля 2010

Я пытаюсь повернуть метку на 90 градусов. В данный момент я могу взять текст с метки и повернуть его, но на самом деле я хочу повернуть метку по своему выбору, или, если я хочу быть по-настоящему ярким, скажем, с помощью кнопки. Поэтому, используя приведенный ниже код, как я могу изменить его, чтобы я мог передать ему элемент управления и заставить его вращать его?

protected override void OnPaint(PaintEventArgs e)
    {
        Graphics graphics = e.Graphics;

        string text = label4.Text;

        StringFormat stringFormat = new StringFormat();
        stringFormat.Alignment = StringAlignment.Center;
        stringFormat.Trimming = StringTrimming.None;

        Brush textBrush = new SolidBrush(this.ForeColor);

        //Getting the width and height of the text, which we are going to write
        float width = graphics.MeasureString(text, this.Font).Width;
        float height = graphics.MeasureString(text, this.Font).Height;

        //The radius is set to 0.9 of the width or height, b'cos not to 
        //hide and part of the text at any stage
        float radius = 0f;
        if (ClientRectangle.Width < ClientRectangle.Height)
        {
            radius = ClientRectangle.Width * 0.9f / 2;
        }
        else
        {
            radius = ClientRectangle.Height * 0.9f / 2;
        }
        int rotationAngle = 90;
        double angle = (rotationAngle / 180) * Math.PI;
        graphics.TranslateTransform(
            (ClientRectangle.Width + (float)(height * Math.Sin(angle)) - (float)(width * Math.Cos(angle))) / 2,
            (ClientRectangle.Height - (float)(height * Math.Cos(angle)) - (float)(width * Math.Sin(angle))) / 2);
        graphics.RotateTransform((float)rotationAngle);
        graphics.DrawString(text, this.Font, textBrush, 0, 0);
        graphics.ResetTransform();        
    }

Ответы [ 2 ]

4 голосов
/ 01 июля 2010

Стандартные элементы управления формами окон (например, метка и кнопка) отображаются самой операционной системой, формы окон не выполняют фактический рисунок.

Поэтому, к сожалению, вы не можете управлять такими аспектами, как вращение и масштабирование. Это всего лишь ограничение самой Windows Forms и одна из основных причин, по которой Microsoft создала WPF.

Элементы управления WPF полностью отрисовываются WPF (с использованием DirectX за кулисами). WPF поддерживает все стандартные 2D (и 3D) преобразования, такие как масштабирование, вращение и перемещение.

Альтернативно в формах Windows вы можете создать пользовательский элемент управления, который вы отображаете с помощью GDI + и можете поворачивать и масштабировать по мере необходимости. Конечно, теперь вы делаете всю работу самостоятельно, что, кажется, не то, что вы хотите.

0 голосов
/ 01 июля 2010

Вы можете использовать WPF вместо WinForms ... тогда это простое преобразование;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...