我在表单上创建了许多透明控件,每个控件都显示一个十六进制形状,它们被分组为一个映射,因此这些渐变是边对边的。当然,每个十六进制包含在一个方形控件中,因此它们与每个相邻的十六进制重叠。我希望能够在十六进制内部单击以使其突出显示。但是,除非我在没有重叠的十六进制中间点击,否则根据控件的堆栈顺序,点击事件将由顶部的任何控件拾取,而不一定是我想要的控件。所以我看到它,我需要做两件事:
答案 0 :(得分:2)
我无法给你代码,因为我需要花一些时间来处理确切的代码,但我确实建议你如何实现它......
1)计算出鼠标可能点击的所有控件。也许你可以通过计算相对于所有控件的鼠标位置并寻找重叠点
来做到这一点2)迭代所有潜在候选者并计算鼠标点与每个对照的中心点之间的距离(this might help)。正确的控制将是距离最短的控制
你需要把数学放在这个上面!
解决方案:
这有效,我已经测试过了。我拥有:绘制形状的UserControl,称为“ClickControl”。我的所有ClickControl都位于名为Panel
的{{1}}内。每个ClickControl都向其注册了相同的mainPanel
事件,在本例中为MouseClick
事件。考虑到所有这些,这里是示例代码:
control_MouseClick
我确信如果您遇到性能问题,可以进行大量优化,但这至少是一个有效的开始!