检查一个控件是否正在“触摸”另一个控件

本文关键字:控件 触摸 另一个 是否 一个 检查 | 更新日期: 2023-09-27 18:34:23

我正在尝试检查一个Windows窗体控件是否"接触"了同一窗体中的另一个Windows 窗体控件。

例:窗体内有两个按钮。假设这两个按钮在窗体的边界内是可移动的。如何检查两个按钮是否接触(或任何系统控制)?

如何检查?

检查一个控件是否正在“触摸”另一个控件

您可以对照其他控件检查控件Bounds,并检查它们是否有任何间隙。

// if your first control is specified you can use the following code
foreach (Control c2 in Controls)
{
    if (!c2.Equals(c1) && c2 is Button /* if you want it to be just buttons */
    && c1.Bounds.IntersectsWith(c2.Bounds))
    {
        // c1 has touched c2
    }
}

如果所有控件都可以移动,并且您想查看它们何时相互接触,则可以使用以下代码:

foreach (Control c1 in Controls)
{
    foreach (Control c2 in Controls)
    {
        if (!c2.Equals(c1) 
        && c1.Bounds.IntersectsWith(c2.Bounds))
        {
            // c1 has touched c2
        }
    }
}

维护所有父控件的显示矩形。例如,如果有一个分组框,则维护该组框的显示矩形,而不是其中的控件。移动控件时,检查当前显示矩形是否与另一个显示矩形重叠。