题
我有一个使用 ShowDialog 方法打开模式表单的应用程序。显示此表单后,即使光标位于表单之外,我也想捕获鼠标移动。如何捕获鼠标移动?我看到了带有 Capture 属性的东西,但我无法使其工作。
[编辑]
如果鼠标移出表单,我希望收到通知。
解决方案
这 Capture
财产是正确的方式,但也有一些限制。
- 只有前台窗口可以捕获鼠标
- 系统的其他部分可以禁用鼠标捕获
- Win32 API 函数
SetCapture
每次发生“鼠标松开”事件时都会重置。我认为这也适用于 .NET。
请参阅 备注部分 的 Capture
财产。
捕获鼠标时,您将收到常见事件,但鼠标坐标范围更宽(例如,如果鼠标位于捕获控件的左侧,则为负 X 位置)
由于其全球性,鼠标捕获很脆弱。检查是否有其他方法来处理某些事件。也许是 MouseLeave
或者 MouseEnter
对于你的情况来说,事件就足够了。
其他提示
您可以使用静态属性 Control.MousePosition 。
您可以使用Cursor.Position属性读取光标的位置,请参阅 Cursor.Position
不隶属于 StackOverflow