using System.Runtime.InteropServices;
public static class SystemInformationExtensions
{
private const int SPI_SETMOUSEHOVERTIME = 0x0067;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool SystemParametersInfo(
int nAction, int nParam, ref int value, int ignore);
public static void SetMouseHoverTime(int milliseconds)
{
SystemParametersInfo(SPI_SETMOUSEHOVERTIME,
milliseconds, ref milliseconds,0);
}
}
3条答案
按热度按时间6gpjuf901#
这是可能的,但不像你想象的那么简单。
ToolStrip控件在具有内部ToolTip属性时不公开ToolTip属性。此外,该控件不依赖于自动工具提示行为,而是在Hover事件上手动显示工具提示。这里的问题是,悬停事件也有一个依赖于内部计时器的自定义实现。
考虑到上述事实,你可以想象如何hacky是改变toolstrip的工具提示延迟的解决方案,你决定它是否值得,但这里是解决方案:
**注意:**您看到我找到的私有字段使用了其类型而不是其名称的原因是因为字段的名称在“.NET Framework”实现中是“
mouseHoverTimer
”,而在“.NET(CORE/5/6)”中是“_mouseHoverTimer
”。当我们依赖于内部实现细节时,这就是问题所在,但有时这是不可避免的。1l5u6lss2#
在我的另一个答案中,我已经展示了如何修改初始延迟,但正如Elmue在评论中指出的那样,OP似乎正在寻找
AutoPopDelay
,这是显示工具提示的持续时间。为此,您可以获取ToolStrip的内部ToolTip并设置其属性:
eh57zj3b3#
这里有一个完全不同的方法,你应该总是避免,除非你知道你正在改变一个系统范围的设置,这不会影响你的应用程序。
正如我在另一个答案中提到的,有一个内部计时器负责显示工具提示的悬停时间,计时器的默认间隔是SystemInformation.MouseHoverTime的值。
您可以使用SystemParametersInfo更改该值。此值是一个系统范围的设置,如果您更改它,它将应用于依赖此值的所有应用程序。也就是说,你决定是否要改变它,但这里是解决方案:
假设您创建了以下helper类:
你可以这样使用它: