我正在为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();
}
}
}
}
我希望有人看到我做错了什么。 提前谢谢。