c# - 如何检查两个控件是否在 Windows 窗体中重叠

标签 c# winforms mouseevent panel

我创建了一个允许用户在窗体上拖动面板的类。我怎样才能确保 用户不会将两个面板放在一起?如果他们这样做,我想在它们重叠时移动/或突出显示其中一个控件。

我尝试在 OnMouseDown 事件中进行设置,但效果不佳。

此外,表单上面板的数量取决于表单需要显示的图片数量。每个面板在面板内都有一个图片框。

最佳答案

更好的方法是使用 Rectangle.Bounds.IntersectsWith 方法,它会为您进行检查并生成更简洁的代码。我个人并不知道任何性能问题或好处,无论是哪种方式,尽管我大胆猜测,简单地循环您的控件并用它检查它们会比构建列表和循环两者更快。

Picturebox pic = new Picturebox();
foreach(Control picturebox in Form1){
   if (pic.Bounds.IntersectsWith(picturebox.Bounds))
   {
       //We have a problem, Houston, because we just collided!
   }
}

我希望这对您有所帮助,即使您之前问过这个问题。

关于c# - 如何检查两个控件是否在 Windows 窗体中重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917537/

相关文章:

c# - 在 WinForms 中居中和滚动的 PictureBox

c++ - 使用 Oblita/Interception 库发送鼠标点击/发送坐标?

c# - 如何使用 ninject 在 HttpModule 中注入(inject)依赖项?

c# - 找不到命名空间 Microsoft.Win32

c# - 如何使用 MemoryFailPoint?

c# - 无需通过 OWIN 即可提供静态文件

c# - 不允许在 numericUpDown 中输入文本

c# - 在其他线程加载数据时显示加载动画

java - 在不向所有组件添加鼠标监听器的情况下查看何时单击鼠标按钮

java - 鼠标退出java时的锁定事件