Var*_*ave 8 c# panel mouseevent winforms
我创建了一个允许用户在表单上拖动面板的类.如何确保用户不会将两个面板放在一起?如果他们这样做,我想在它们重叠时移动/或突出显示其中一个控件.
我尝试在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!
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助,即使你前一段时间问过这个问题.
所以我在sgud的建议的帮助下解决了这个问题。
诀窍是在引发的 OnMouseUp 事件中使用 Rectangle.Intersect 方法。
这是我在其背后使用的直觉。(这可能不是最好的解决方案)
1)创建主面板内所有控件的列表。
2) 遍历控件并为每个控件创建所有矩形边界的列表。你可以通过 control.Bounds 得到这个
3) 遍历边界列表并将其与当前活动元素的边界相交。
如果返回的矩形的高度和宽度与活动控件相同,则分配更改背景颜色属性。
我希望这对有类似问题的其他人有所帮助
归档时间: |
|
查看次数: |
4839 次 |
最近记录: |