我需要能够连续检查鼠标是否在表单上的某个区域内。不过我希望能够在不使用计时器的情况下完成此操作。我该怎么做呢?
我正在使用C#btw。
答案 0 :(得分:6)
您是否尝试将处理程序附加到MouseMove
事件,并检查每个动作?
答案 1 :(得分:3)
如果该区域是屏幕控制,您可以使用MouseEnter
,MouseLeave
,MouseHover
和MouseMove
个事件。
答案 2 :(得分:1)
我认为其他人建议的鼠标事件是最好的解决方案,但作为计时器的另一种替代方法,您可以编写一个小函数来检查鼠标,然后在主窗口调度程序上以“应用程序空闲”优先级继续调用它。这将持续运行您的检查而不冻结UI。 再次,挂钩到mousemove事件仍然是一个更清洁的解决方案,IMO。
答案 3 :(得分:1)
如果过于频繁地挂钩MouseMove事件 - 或者如果您想避免在每个表单上挂钩该事件,请考虑挂钩Application.Idle事件。
每次应用程序即将空闲时,此事件都会触发 - 所有待处理的消息(包括重新绘制)都已处理完毕,没有什么可做的。在大多数WinForms应用程序中,这种情况每秒发生几次,提供了一种“及时”处理的好方法。
答案 4 :(得分:0)
您需要在该区域定义事件。
同时使用OnMouseEnter
和OnMouseLeave
来判断鼠标是否在此区域内!
OnMouseEnter
直到OnMouseLeave
表示鼠标仍在该区域内。