在C#Windows应用程序中,有2个不同的鼠标事件,MouseEnter
和MouseHover
,当光标位于对象上时都会触发。
他们之间有什么区别?
答案 0 :(得分:25)
假设您使用的是Windows窗体:
鼠标输入发生:
鼠标指针进入控件时发生。
(MSDN)
鼠标悬停:
当鼠标指针停留在控件上时发生。
MouseHover的典型用法是在鼠标时显示工具提示 暂停控件周围指定区域内的控件( “悬停矩形”)。引发此事件所需的暂停是 由MouseHoverTime属性以毫秒为单位指定。
(MSDN)
要全局设置MouseHoverTime(不推荐,请参阅@ IronMan84的链接here以获得更好的解决方案),您可以使用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的Sigantures:SystemParametersInfo,SPIF (Enum),SPI (Enum)
我在这里没有包含Enum
个签名,因为它们太长了。只需使用PInvoke.Net上的链接(上面链接)
有关SystemParametersInfo API调用及其参数的完整信息,请参阅MSDN。
答案 1 :(得分:11)
MouseEnter是您的鼠标进入该区域的时间。
MouseHover是指鼠标停留一段时间(通常用于工具提示)。
就鼠标事件而言,MouseEnter
事件发生在任何其他事件之前。此外,您可以手动设置在MouseHover
事件被触发之前鼠标必须悬停在该区域上的时间。您可以查看有关here的更多信息。
编辑:我在调整MouseHoverTime时更改了链接。它转变为你不能轻易做到,并且强烈建议不要这样做,因为它是一个系统值,它会影响机器上的所有应用程序。相反,新链接显示了如何使用新的特定于应用程序的变量来手动执行此操作。