Можно ли повернуть кнопку управления в WinForms? - PullRequest
2 голосов
/ 27 февраля 2011

Можно ли повернуть кнопку или любой элемент управления под определенным углом в WinForms? Если да, то как?

Ответы [ 4 ]

7 голосов
/ 20 февраля 2015

Если вы действительно хотите (я понятия не имею, зачем это нужно ... *), вы можете попробовать использовать подкласс Button, возможно, вот так:

public partial class TurnButton : Button
{
    public TurnButton()
    {
        InitializeComponent();
    }

    int angle = 0;   // current rotation
    Point oMid;      // original center

    protected override void OnLayout(LayoutEventArgs levent)
    {
        base.OnLayout(levent);
        if (oMid == Point.Empty) oMid = new Point(Left + Width / 2, Top + Height / 2);
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
       int mx = this.Size.Width / 2;
       int my = this.Size.Height / 2;
       SizeF size = pe.Graphics.MeasureString(Text, Font);
       string t_ = Text;
       Text = "";

        base.OnPaint(pe);

        if (!this.DesignMode)
        {
            Text = t_; pe.Graphics.TranslateTransform(mx, my);
            pe.Graphics.RotateTransform(angle);
            pe.Graphics.TranslateTransform(-mx, -my);

            pe.Graphics.DrawString(Text, Font, SystemBrushes.ControlText,
                                  mx - (int)size.Width / 2, my - (int)size.Height / 2);
        }
    }



    protected override void OnClick(EventArgs e)
    {
        this.Size = new Size(Height, Width);
        this.Location = new Point(oMid.X - Width / 2, oMid.Y - Height / 2);
        angle = (angle + 90) % 360;
        Text = angle + "°";

        base.OnClick(e);
    }
}

(* Я и понятия не имею, почему я это написал; -)

6 голосов
/ 27 февраля 2011

Вы не можете вращать элементы управления. Это просто не поддерживается родными элементами управления API, которые использует WinForms.

И можно задаться вопросом, почему даже должно бытьподдерживается.Что вы могли бы попытаться сделать, чтобы повернуть кнопку?Было бы гораздо проще нарисовать его в другом месте с другой формой, чем пытаться повернуть существующий элемент управления.(Обратите внимание, что вы также можете изменить размер и переместить элемент управления во время выполнения, если это соответствует вашим потребностям. Изучите свойства Size и Location.)

Единственный обходной путь - нарисовать изображение элемента управления в растровом изображении, скрыть элемент управления и нарисовать растровое изображение на форме в том месте, где вы хотите, чтобы оно появилось.Конечно, это не приведет к элементу управления, с которым пользователь может взаимодействовать .Они не смогут нажимать изображение кнопки, потому что это не настоящая кнопка.Если это приемлемо для вас, вам, вероятно, следует использовать изображение, а не кнопку.

2 голосов
/ 27 февраля 2011

Это похоже на вопрос, заданный здесь: Вращение панели .NET в Windows Forms

Краткий обзор ответов на этот вопрос таков: хотя это и возможно сделать, но это будет очень и очень сложно.

0 голосов
/ 20 ноября 2012

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

Используйте tabControl и измените его размер, чтобы у вас оставалась только кнопка. Установите выравнивание влево / вправо, и ваша кнопка будет повернута на 90/270 градусов.

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