【问题标题】:Menu item's tooltip hidden by submenu dropdownlist菜单项的工具提示被子菜单下拉列表隐藏
【发布时间】:2017-08-29 20:18:02
【问题描述】:

我有一个 winforms ContextMenuStrip,它为所有 ToolStripMenuItem 设置了 ToolTipText。

其中一个菜单项“插入操作”具有关联的 ToolStripDropDown 子菜单。当鼠标移动到 Insert Action 时,下拉菜单会自动显示,并且与 Insert Action 关联的工具提示会显示,但会被推送到 ContextMenuStrip 和下拉菜单后面的背景。

查看这里的问题图片:http://www.screencast.com/t/GZkeBNcU

我尝试在打开子菜单后以编程方式重新选择插入操作,但工具提示不会重新显示在顶部。

有什么想法吗?

或者有没有办法只在单击时显示插入操作的子菜单(而不是在鼠标移到它上面时自动显示)?我认为应该有一个设置,但一直找不到。

感谢您的帮助。

【问题讨论】:

  • 您可以在带有工具提示的部件上添加示例代码吗?
  • 我使用可用于 ToolStripMenuItem 的内置工具提示,因此除了设置菜单项的 ToolTipText 和 AutoToolTip (false) 属性并将 ContextMenuStrip 的 ShowItemToolTips 属性设置为是的。
  • 您确定这种行为是您想要的吗?我的直觉告诉我,为每个菜单项添加那么多帮助信息似乎有点混乱......
  • 所有菜单项的弹出帮助已为新用户打开,用户可以通过帮助菜单选择打开/关闭。

标签: c# winforms drop-down-menu tooltip


【解决方案1】:

好吧,这不是很优雅,所以请耐心等待。

似乎 ToolTipText 最初是在顶部绘制的,但是一旦加载下一个 ToolStripMenuItems(在您的情况下由“插入操作”带来的那些),两组 MenuStrips 都会在 ToolTipText 上方找到它们的方式。所以,我的动机是强制 ToolTipText 在新的 MenuStrip 加载后出现。

所以,首先我向 myToolStripMenuItem 添加了一个 DropDownOpened 处理程序,它可以是您命名为“插入操作...”MenuItem 的任何内容。

然后,我添加了以下代码

private void myToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
    myToolStripMenuItem.Visible = false;
    myToolStripMenuItem.Visible = true;
    myToolStripMenuItem.ToolTipText = "Tooltip info that you want to see!";
}

它的作用是等待子菜单加载,切换 myToolStripMenuItem 的可见性(这是所有这一切中最丑陋的部分),并重置 ToolTipText,强制它在所有内容加载后显示并在顶部一切。

但是,如果您尝试悬停并离开两次或更多次,则这样离开会导致一些文本闪烁。只需使用此代码试一试,您就会明白我的意思。因此,您必须将 ToolTipText 重置为空白字符串。当同一个 MenuItem 的 DropDownClosed 事件触发时,我这样做了。

private void myToolStripMenuItem_DropDownClosed(object sender, EventArgs e)
{
    myToolStripMenuItem.ToolTipText = "";
}

现在,ToolTipText 会准确地出现在我们希望它出现的时间和位置,而不会闪烁。

注意:此方法会导致 ToolTipText 的显示时间比正常情况要长一些。当然,这是因为代码等待下拉菜单加载。此外,切换 myToolStripMenuItem.Visible 有时会导致菜单闪烁。不过,我觉得这比显示你看不到的 ToolTipText 要好得多。

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多