我需要检测何时用户将鼠标移动到窗体及其所有子控件上以及它何时离开窗体。我试过形式的MouseEnter
和MouseLeave
事件,我尝试了WM_MOUSEMOVE
& WM_MOUSELEAVE
和WM_NCMOUSEMOVE
双Windows消息,但没有似乎工作,因为我想...如何检测鼠标是否在整个窗体和子控件中?
我大部分的表格是由子控件占据很多种类,没有太多的客户区可见。这意味着如果我非常快地移动鼠标,鼠标移动将不会被检测到,尽管鼠标在表格内。例如,我有一个TextBox停靠在底部,桌面和TextBox之间,只有一个非常小的边框。如果我将鼠标从底部快速移动到文本框中,将无法检测到鼠标移动,但鼠标位于文本框内,因此位于表格内。
我该如何实现我所需要的?
这不仅使得它的工作另一种方式......我的意思是,现在它检测到当鼠标移动到窗体的孩子控制,但没有形式本身。我想检测整个事情。我还需要检测鼠标何时进入窗体,何时离开,而不仅仅是它在内部移动。 – 2009-06-12 13:27:25
嗯,我在这个例子中发现了我正在寻找的东西:http://netcode.ru/dotnet/?lang=&katID=30&skatID=283&artID=7862。它使用与您的答案IMessageFilter相同的原则。它允许我检测鼠标何时进入和离开表单。我只需将代码调整到我想要的状态。无论如何,如果你能在IMessageFilter上详细说明你的答案,它是什么,它是如何工作的以及所有这些,我将把这个答案标记为已接受的答案。并且请添加注释以查看其他人寻找解决完全相同问题的注释。 – 2009-06-12 14:19:51