【发布时间】:2009-09-15 10:28:54
【问题描述】:
我有一个应用程序,它使用 ShowDialog 方法打开一个模式表单。 显示此表单后,即使光标在表单之外,我也想捕捉鼠标移动。 如何捕捉鼠标移动?我看到了 Capture 属性的一些东西,但我无法让它工作。
[编辑]
我想在鼠标移出表单时收到通知。
【问题讨论】:
我有一个应用程序,它使用 ShowDialog 方法打开一个模式表单。 显示此表单后,即使光标在表单之外,我也想捕捉鼠标移动。 如何捕捉鼠标移动?我看到了 Capture 属性的一些东西,但我无法让它工作。
[编辑]
我想在鼠标移出表单时收到通知。
【问题讨论】:
Capture 属性是正确的方法,但有一些限制。
SetCapture 会在每次“鼠标向上”事件发生时重置。我认为这也适用于 .NET。查看Capture 属性的remarks section。
当鼠标被捕获时,您将收到通常的事件,但鼠标坐标范围更广(例如,如果鼠标位于捕获控件的左侧,则 X 位置为负)
鼠标捕捉是脆弱的,因为它是全球性的。检查是否有其他方法来处理某些事件。在您的情况下,MouseLeave 或 MouseEnter 事件可能就足够了。
【讨论】:
您可以只使用静态属性Control.MousePosition。
【讨论】:
您可以使用 Cursor.Position 属性读取光标的位置,请参阅Cursor.Position
【讨论】: