C# 不允许控件重叠

C# 不允许控件重叠,c#,winforms,dynamic,controls,C#,Winforms,Dynamic,Controls,我一整天都在试图弄清楚如何不允许我在事件上绘制的控件检查并查看是否有另一个控件,如果有,则将其移动,以使它们不会重叠。我需要它们能够重叠,如果用户拖动它们到那里,但在创建控件时检查并移动它们(如果需要)。我正在尝试创建一个纸牌游戏,不希望控件隐藏在用户尚未手动移动的控件(卡)后面。我使用图片框作为我的卡片。任何帮助都将不胜感激。这是我表格的屏幕截图。较暗的面板是玩家手中的东西。浅灰色的面板是运动场。理想情况下,用户会玩一张牌,它会尝试将它放在面板的左上角。如果有一张卡与之相交,则将其移到另一张卡

我一整天都在试图弄清楚如何不允许我在事件上绘制的控件检查并查看是否有另一个控件,如果有,则将其移动,以使它们不会重叠。我需要它们能够重叠,如果用户拖动它们到那里,但在创建控件时检查并移动它们(如果需要)。我正在尝试创建一个纸牌游戏,不希望控件隐藏在用户尚未手动移动的控件(卡)后面。我使用图片框作为我的卡片。任何帮助都将不胜感激。这是我表格的屏幕截图。较暗的面板是玩家手中的东西。浅灰色的面板是运动场。理想情况下,用户会玩一张牌,它会尝试将它放在面板的左上角。如果有一张卡与之相交,则将其移到另一张卡上,直到它不接触卡为止。基本上找一块空地放卡片


您是否尝试过使用flow layout panel类?它位于工具箱=>容器下,您可以使用此控件设置如何将控件添加到其中。

您的问题是什么?如果您问我如何检查空间是否为空,您可以执行
myPanel.GetChildAtPoint(checkThisPoint)
。它将返回一个覆盖该点的控件。你需要发展逻辑来保持和检查所有控件的位置,这正是我的问题。例如,我将如何运行一个循环来检查每个(卡)picturebox,并对照新创建的picturebox进行检查,如果它们将相互接触,则移动它。如果在这一点上它接触到另一个,然后再次移动它。请检查此代码。这是一个例子,不是确切的答案,但它可能是其中的一部分。您需要一系列数组等来保存所有信息并在内存中进行比较。例如,一个卡片堆栈可以是一个被篡改的数组。你有一个堆栈数组,在堆栈中你有一个卡片数组-纯编程:o)我尝试过摆弄它,但是,这不会影响用户在添加图片框后能够按照自己的意愿在表单上拖动图片框吗?