在Winforms运行时中移动多个控件

时间:2018-03-24 09:15:59

标签: c# winforms

我正在为Winforms构建运行时设计器。此设计器的目标是在其容器中移动控件(例如,窗体或面板)。

当我一次移动一个控件时,一切都很完美。当我选择多个控件时,出现问题,但并非总是如此: 当我选择两个按钮时,移动工作正常,但是当我选择Label和TextBox时,标签向错误的方向移动。

以下是一个例子:https://www.screencast.com/t/sPaH4VNr

这是我的代码:

    protected virtual void ControlMouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            IsMouseDown = true;
            Point startPosition = Control.PointToScreen(new Point(e.X, e.Y));

            OffsetMove = new Point();
            OffsetMove.X = Control.Location.X - startPosition.X;
            OffsetMove.Y = Control.Location.Y - startPosition.Y;
        }
        else
        {
            IsMouseDown = false;
        }
    }

    protected virtual void ControlMouseMove(object sender, MouseEventArgs e)
    {
        this.Control.Cursor = IsMovable && IsMoveAllowed(e) ? Cursors.SizeAll : Cursors.Default;

        if (IsMouseDown && this.Control.Cursor == Cursors.SizeAll)
        {
            foreach (var control in Parent.SelectedControls.Select(sc => sc.Control))
            {
                Point newPoint = control.PointToScreen(e.Location);
                newPoint.Offset(OffsetMove);

                if (control.Location != newPoint)
                {
                    control.Location = newPoint;

                    control.Parent.Invalidate();
                }

            }
        }
    }

我希望有人看到我做错了什么。 提前谢谢。

0 个答案:

没有答案