我刚刚完成了处理表格布局面板中的 UI 的程序的一部分。到目前为止,这已经奏效,但我注意到,在我可以在运行时围绕表单尝试我的控件(我添加的功能)之前,但现在它在单元格中,它们不能移动到其容器单元格之外。但是,这很好,正是我所需要的,但我发现控件(例如按钮)将正确包含在左侧的单元格和单元格的顶部边界中,但底部和右侧边界允许控制消失。下面是一些截图来演示:
在这里,我们看到按钮控件不能越过单元格的顶部和左侧边界。
然而,在这里它似乎能够越过单元格的底部和右侧边界。
回顾我是如何让我的控件移动的,我遇到了一个我设置了一些变量的部分,如下所示:
public static void MouseMove(object sender, MouseEventArgs e)
{
Control control = sender as Control;
Control container = sender as Control;
if (control != null)
{
if (Dragging)
{
if (direction != Direction.Vertical)
{
container.Left = Math.Max(0, e.X + container.Left - DragStart.X);
}
if (direction != Direction.Horizontal)
{
container.Top = Math.Max(0, e.Y + container.Top - DragStart.Y);
}
}
}
}
我想在这里我没有设置底部和右侧容器边界,这是有道理的,但是在探索智能感知时,我似乎无法获得 container.right 和 container.bottom,因为它们带有以下工具提示:
"gets the distance, in pixels, between the right edge of the control, and the left edge of it's container's client area"
和底部一样,只针对控件的底部和容器区域的顶部。
有没有解决的办法?也许某个地方的选项将控件的底部连接到单元格的底部边界,右边也是如此?
编辑1:或者,也许我需要改变我的mousemove事件以更好地处理碰撞,所以如果有人对此也有任何想法,那就太好了,我之前没有真正看过太多碰撞检测,尤其是在winforms中。