Windows 表单子菜单自动隐藏延迟 - 如何保持子菜单短暂打开以获得更宽容的鼠标控制

Windows Forms submenu autohide delay - How to keep submenu open briefly to get more forgiving mouse control

两个屏幕截图均来自 Windows Explorer on Windows 10.

在 Winforms 中,有没有办法强制第一个屏幕截图中显示的子菜单行为?

在这种更宽容的模式下,当子菜单可见时,碰巧短暂地穿过其他菜单项的对角线鼠标移动不会对用户造成不利影响,并且很容易点击目标子菜单项。

[]

我想避免这种行为,其中对角线移动 do 会惩罚用户并且很难击中目标子菜单项。

[]

这对 Google 来说有些困难,因为对此没有真正具体的术语。我尝试了“宽限期”“宽限期”“延迟”“对角线”等搜索,但找不到任何有价值的东西。

如果您使用 MenuStrip,默认行为会好得多,您还可以调整 show/hide 延迟,让用户有更多时间移动光标。

默认延迟来自 SystemInformation.MenuShowDelay,它来自系统范围的设置,我假设您不想更改该设置。

有一个内部 MenuTimer 控制 show/hide 延迟。您可以像这样更改计时器的间隔:

private void Form1_Load(object sender, EventArgs e)
{
    var menuTimer= typeof(ToolStripMenuItem).GetField("menuTimer",
      System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)
      .GetValue(null);
    menuTimer.GetType().GetField("slowShow",
      System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
      .SetValue(menuTimer, 1000);
}

并且在子菜单自动关闭之前用户将有更多时间: