|
|
1
8
经过更多的研究,我发现 Application.AddMessageFilter method . 使用这个,我创建了一个.NET版本的鼠标挂钩:
然后,我可以在容器控件中处理mousemove事件,检查鼠标是否在父控件中,然后开始工作。(我还必须跟踪上一个鼠标悬停在父控件上的情况,以便停止先前启动的父控件。) ------编辑 在我的窗体类中,我创建并连接筛选器:
|
|
|
2
7
我觉得我找到了一个比目前公认的顶级解决方案更好的解决方案。 其他建议的解决方案的问题是,它们要么相当复杂(直接处理较低级别的消息)。 或者,它们会在角情况下失败:如果鼠标直接从子控件内部转到容器外部,则依赖鼠标在mouseleave上的位置可能会导致错过鼠标退出。 虽然此解决方案并不完全优雅,但它非常简单且有效: 添加一个透明控件,该控件占用要接收MouseEnter和MouseSave事件的容器的整个空间。 我在Amed的回答中发现了一个很好的透明控制: Making a control transparent 然后我把它简化为:
示例用法:
享受适当的mouseleave和mouseenter活动! |
|
|
3
3
您可以像这样找出鼠标是否在控件的边界内(假定此代码驻留在容器控件中;如果不在,则替换
|
|
|
4
2
我认为你不需要挂信息泵来解决这个问题。用户界面中的一些标记应该可以做到这一点。我认为您在控制类中创建了一个成员变量,类似于control-someparent,当调用一个onMouseEnter处理程序时,它将引用父控件。然后,在onmouseleave中,检查someparent“标志”的值,如果它与当前发件人的值相同,则不要实际停止处理,只需返回即可。只有当父级不同时,您才会停止并将ousomeParent重置为空。 |
|
|
5
1
我也有同样的需求。保罗·威廉姆斯的回答为我提供了核心思想,但我很难理解代码。我又找到了一个 here 两个例子一起帮助我开发了自己的版本。
要初始化,请将感兴趣的容器控件传递到
然后,在操作期间,类过滤
在下面的使用示例中,我们希望监视鼠标的进入和退出
|