在C# Windows应用程序中,有两种不同的鼠标事件
它们之间有什么区别?
MouseEnter
和MouseHover
,当光标悬停在对象上时都会触发。它们之间有什么区别?
MouseEnter
和MouseHover
,当光标悬停在对象上时都会触发。假设您正在使用 Windows Forms:
鼠标进入事件:
当鼠标指针进入控件时发生。
(MSDN)
鼠标悬停事件:
当鼠标指针停留在控件上时发生。
MouseHover 的典型用途是在指定区域内(即“悬停矩形”)的控件上暂停鼠标时显示工具提示。此事件被引发所需的暂停时间由 MouseHoverTime 属性以毫秒为单位指定。
(MSDN)
要全局设置 MouseHoverTime (不推荐, 可以查看@IronMan84的链接这里获取更好的解决方案),您可以使用 SystemParametersInfo 函数。因为这是一个 Win32 API 调用,所以您需要使用 PInvoke:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(SPI uiAction, uint uiParam, IntPtr pvParam, SPIF fWinIni);
称为:
SystemParametersInfo(SPI.SPI_SETMOUSEHOVERTIME,
desiredHoverTimeInMs,
null,
SPIF.SPIF_SENDCHANGE );
PInvoke.NET 提供的函数签名: SystemParametersInfo, SPIF (枚举), SPI (枚举)
这里没有包含Enum
的签名,因为它们太长了。请使用上面链接到的PInvoke.Net上的签名。
有关SystemParametersInfo API调用及其参数的完整信息,请参见MSDN。
MouseEnter是指光标进入区域时触发的事件。
MouseHover是指当光标停留在该区域一段时间后触发的事件(通常用于工具提示)。
就鼠标事件而言,MouseEnter
事件是最先发生的。此外,您可以手动设置光标停留在该区域多长时间后触发MouseHover
事件。您可以在此处了解更多信息。
编辑:我更改了调整MouseHoverTime的链接。事实证明您不能轻松地这样做,并且强烈建议不要这样做,因为它是系统值,会影响计算机上的所有应用程序。相反,新的链接显示了如何使用一个新的、特定于应用程序的变量手动完成此操作。