是否可以在WinForms中旋转按钮控件?

Saj*_*are 2 .net c# button winforms

是否可以在WinForms中以特定角度旋转按钮或任何控件?如果是这样,怎么样?

TaW*_*TaW 7

如果你真的想(我不知道为什么会...*)你可以尝试使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

(*我不知道为什么我写这个;或者;-)


Cod*_*ray 6

您无法旋转控件.WinForms使用的本机API控件根本不支持它.

人们可能想知道为什么它应该得到支持.您可能想要做什么,您需要旋转按钮控件?首先将它绘制在具有不同形状的不同位置更容易,而不是尝试旋转现有控件.(请注意,如果符合您的需要,您还可以在运行时调整控件的大小和重新定位.调查SizeLocation属性.)

唯一的解决方法是将控件的图像绘制到位图,隐藏控件,并将位图绘制到您希望它出现的位置的表单上.当然,这不会导致用户可以与之交互的控件.他们将无法点击按钮的图像,因为它不是真正的按钮.如果这是你可以接受的,你应该首先使用图像,而不是按钮.