如何捕捉移动的customcontrol

时间:2011-05-20 14:29:47

标签: c# .net winforms controls custom-controls

我试着解释我的问题:

我在面板上获得了许多相同类型的自定义控件。

在运行时,我可以使用bringtofront()将鼠标悬停在任何其他自定义控件上,然后将表单中的任何custumcontrol(mousedown和mousemove事件)移动到其中。

现在我需要知道我正在移动的控件何时超过任何其他控件以及哪个控件处于控制之下。

到目前为止,我已尝试使用拖放事件但没有成功,还有其他一些方法可以做到这一点,或者我要用拖动事件来详细说明它?

谢谢大家的帮助

抱歉我的英语。

编辑:

控件是纸牌游戏,我的最终目标是使用卡片根据卡片值和/或颜色创建遵循规则的逻辑顺序。

1 个答案:

答案 0 :(得分:1)

您无法通过拖放解决问题,因为您实际上并未将一个控件放到另一个控件上。你只是在表格中移动它们。

您需要熟悉 Z顺序,这是虚拟3D空间中对象的前后排列。要调整Z顺序,您可以调用System.Windows.Forms.Control派生的任何对象的BringToFrontSendToBack方法。

(容器)控件的Controls collection也公开了Z顺序。使用GetChildIndex method,您可以确定Z顺序中任何控件的位置。

所以现在,你需要做的就是弄清楚你拖动控件的控件已经结束了。通过比较两个控件的Location properties来做到这一点。当您知道两个控件的位置重叠时,请检查它们各自的Z顺序索引,以查看哪个控件位于顶部。