【问题标题】:Not allowing controls to overlap不允许控件重叠
【发布时间】:2014-01-11 01:08:49
【问题描述】:

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

【问题讨论】:

  • 您的问题到底是什么?如果你问我如何检查空间是否为空,你可以做myPanel.GetChildAtPoint(checkThisPoint)。它将返回一个涵盖该点的控件。您需要开发逻辑来保持和检查所有控件的位置
  • 这正是我的问题。例如,我将如何运行一个循环来检查每个(卡片)图片框并根据新创建的图片框检查它,如果它们要相互接触然后移动它。如果此时它碰到另一个,则再次移动它。
  • 请检查此代码stackoverflow.com/a/19717325/1704458。这是示例,不完全是答案,但它可能是其中的一部分。您需要一系列数组等来保存所有信息并在内存中进行比较。例如,牌堆可以是一个棋盘阵列。您有堆栈数组,并且在堆栈中您有卡片数组 - 纯编程:o)

标签: c# winforms dynamic controls


【解决方案1】:

您是否尝试过使用工具箱=> 容器下的流布局面板类与此控件,您可以设置控件的添加方式。

【讨论】:

  • 我已经尝试过使用它,但是这不会影响用户在添加图片框后能够随意拖动表单周围的图片框吗?
猜你喜欢
  • 1970-01-01
  • 2017-01-19
  • 2019-05-11
  • 1970-01-01
  • 2012-12-12
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
相关资源
最近更新 更多