我有一个使用 ShowDialog 方法打开模式表单的应用程序。显示此表单后,即使光标位于表单之外,我也想捕获鼠标移动。如何捕获鼠标移动?我看到了带有 Capture 属性的东西,但我无法使其工作。

[编辑]

如果鼠标移出表单,我希望收到通知。

有帮助吗?

解决方案

Capture 财产是正确的方式,但也有一些限制。

  • 只有前台窗口可以捕获鼠标
  • 系统的其他部分可以禁用鼠标捕获
  • Win32 API 函数 SetCapture 每次发生“鼠标松开”事件时都会重置。我认为这也适用于 .NET。

请参阅 备注部分Capture 财产。

捕获鼠标时,您将收到常见事件,但鼠标坐标范围更宽(例如,如果鼠标位于捕获控件的左侧,则为负 X 位置)

由于其全球性,鼠标捕获很脆弱。检查是否有其他方法来处理某些事件。也许是 MouseLeave 或者 MouseEnter 对于你的情况来说,事件就足够了。

其他提示

您可以使用静态属性 Control.MousePosition

您可以使用Cursor.Position属性读取光标的位置,请参阅 Cursor.Position

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top