mouseenter和mousehover有什么区别?

Zah*_*ema 8 c#

在C#Windows应用程序中,有2个不同的鼠标事件,MouseEnter并且MouseHover当光标在对象上时触发它们.

他们之间有什么区别?

Bra*_*NET 25

假设您使用的是Windows窗体:

鼠标输入发生:

鼠标指针进入控件时发生.

(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);
Run Code Online (Sandbox Code Playgroud)

被称为:

SystemParametersInfo(SPI.SPI_SETMOUSEHOVERTIME, 
                     desiredHoverTimeInMs, 
                     null, 
                     SPIF.SPIF_SENDCHANGE );
Run Code Online (Sandbox Code Playgroud)

来自PInvoke.NET的Sigantures:SystemParametersInfo,SPIF(Enum),SPI(Enum)

我没有在Enum这里包括签名,因为它们非常疯狂.只需使用PInvoke.Net上的链接(上面链接)

有关SystemParametersInfo API调用及其参数的完整信息,请参阅MSDN.


Iro*_*n84 11

MouseEnter是您的鼠标刚进入该区域的时间.

鼠标悬停是指鼠标停留一会儿(通常用于工具提示).

就鼠标事件而言,MouseEnter事件发生在任何其他事件之前.此外,您可以手动设置在MouseHover事件被触发之前鼠标必须悬停在该区域上的时间.你可以在这里看到更多相关信息.

编辑:我改变了调整MouseHoverTime的链接.它转变为你不能轻易做到,并且强烈建议不要这样做,因为它是一个系统值,它会影响机器上的所有应用程序.相反,新链接显示了如何使用新的特定于应用程序的变量来手动执行此操作.