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

时间:2016-02-22 12:53:54

标签: c# winforms events mouseevent

我的表单上有一个PictureBox控件,我已为MouseEnterMouseLeave编写了两个事件。在MouseEnter花药PictureBox上输入表单并放在原始文件旁边,MouseLeave第二个PictureBox就行了。

一切正常。除非光标位于原始PictureBox的边框区域,否则会重复运行MouseEnterMouseLeave个事件。因此第二张图像进入并离开表格,直到光标被带走。这让人感到奇怪。

我该如何避免这种情况?

2 个答案:

答案 0 :(得分:1)

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

一种典型情况是,您希望通过单击在其边框处拖动控件来调整大小或移动控件。除非您使用内部调用并简单地编写mouseenter,-leave,-move,-down和-up,否则您最终可能会使用例如将控件移离鼠标,从而触发另一个离开事件。

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

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

答案 1 :(得分:0)

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

您可以在MouseEnter中对鼠标坐标添加一个检查,以确保鼠标指针在事件触发前进入控件的内部足够远。这样可以防止立即触发离开事件。

相关问题