WinForm 控件拖拽与碰撞检测代码示例
以下是一个简单的示例代码,演示如何在 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事件被触发,我们获取释放的位置,并将控件移动到该位置。然后,我们遍历容器中的所有控件,检测是否有其他控件与当前控件发生碰撞。如果发生碰撞,我们弹出一个消息框来提示用户。
原文地址: https://www.cveoy.top/t/topic/ogtf 著作权归作者所有。请勿转载和采集!