以下是一个简单的示例代码,演示如何在 WinForm 中拖放控件,并检测两个控件是否发生碰撞:

public partial class Form1 : Form
{
    private Control currentControl; // 当前拖动的控件

    public Form1()
    {
        InitializeComponent();
    }  

    // 鼠标按下时开始拖动控件
    private void OnMouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            currentControl = sender as Control;
            currentControl.DoDragDrop(currentControl, DragDropEffects.Move);
        }
    }

    // 控件拖动进入容器时触发
    private void OnDragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

    // 控件拖动结束时触发
    private void OnDragDrop(object sender, DragEventArgs e)
    {
        Control droppedControl = e.Data.GetData(typeof(Control)) as Control;
        Point dropPoint = PointToClient(new Point(e.X, e.Y));

        // 移动控件到鼠标释放的位置
        droppedControl.Location = dropPoint;

        // 检测是否与其他控件发生碰撞
        foreach (Control c in Controls)
        {
            if (c != droppedControl && c.Bounds.IntersectsWith(droppedControl.Bounds))
            {
                MessageBox.Show('碰撞发生了!');
                break;
            }
        }
    }
}

在这个示例中,我们使用OnMouseDown事件来启动拖动操作,并将当前控件作为数据放入拖放操作中。当控件进入容器时,OnDragEnter事件被触发,我们设置拖放效果为移动。当控件被释放时,OnDragDrop事件被触发,我们获取释放的位置,并将控件移动到该位置。然后,我们遍历容器中的所有控件,检测是否有其他控件与当前控件发生碰撞。如果发生碰撞,我们弹出一个消息框来提示用户。

WinForm 控件拖拽与碰撞检测代码示例

原文地址: https://www.cveoy.top/t/topic/ogtf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录