MouseEnter 和 MouseLeave 事件之间的敏感边界区域

Sensitive border area between MouseEnter and MouseLeave events

我的表单上有一个 PictureBox 控件,我为此编写了 MouseEnterMouseLeave 两个事件。 MouseEnter 花药 PictureBox 进入表格并站在原始表格旁边,并且 MouseLeave 第二个 PictureBox 走开。

一切正常。除了当光标位于原始 PictureBox 的边界区域时, MouseEnterMouseLeave 事件重复 运行。因此,第二个图像进入并离开表单,直到光标被移走。这让人觉得很奇怪。

如何避免这种情况?

如果 MouseEnter 事件触发要绘制的边框,或者第一个 PictureBox 的大小以任何方式发生变化,都可能导致您描述的效果。

您可以在 MouseEnter 中添加对鼠标坐标的检查,以确保鼠标指针在事件触发之前进入控件内部足够远。这将阻止立即触发 Leave 事件。

边界区域可能很棘手,尤其是当你想要触发可能影响它的东西时,即使它只有几个像素..

一个典型的情况是当您想要通过单击或拖动控件的边框来调整控件的大小或移动控件时。除非您使用内部调用并简单地编写 mouseenter、-leave、-move、-down 和 -up 代码,否则您很可能会得到例如将控件从鼠标移开,从而触发另一个离开事件。

这通常只发生在一组边框上,例如左&上或右&下。

您需要检查您的代码是否存在任何此类影响,例如新 PictureBox 将旧代码推开几个像素或调整大小使其变小;即使是一个像素也可以导致您看到的效果..