C# 菜单项';s子菜单dropdownlist隐藏的工具提示

C# 菜单项';s子菜单dropdownlist隐藏的工具提示,c#,winforms,drop-down-menu,tooltip,C#,Winforms,Drop Down Menu,Tooltip,我有一个winforms ContextMenuStream,它为所有ToolStripMenuItem设置了ToolTipText 其中一个菜单项“插入操作”具有关联的ToolStripDropDown子菜单。将鼠标移动到“插入操作”时,将自动显示下拉菜单,并显示与“插入操作”关联的工具提示,但会将其推到ContextMenuStip和下拉菜单后面的背景 有关问题的图片,请参见此处: 我曾尝试在子菜单打开后通过编程重新选择“插入操作”,但工具提示不会在顶部重新显示 有什么想法吗 或者,是否有一

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

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

有关问题的图片,请参见此处:

我曾尝试在子菜单打开后通过编程重新选择“插入操作”,但工具提示不会在顶部重新显示

有什么想法吗

或者,是否有一种方法仅在单击时显示插入操作的子菜单(而不是在鼠标移动到其上时自动显示)?我想应该有一个这样的设置,但一直没有找到


谢谢你的帮助。

好吧,这不是很优雅,请耐心听我说

看起来ToolTipText最初是在顶部绘制的,但一旦下一个ToolStripMenuItems加载(在您的案例中是由“插入操作”产生的),两组菜单提示都会在ToolTipText上方找到它们的路径。因此,我的动机是强制ToolTipText在新菜单提示加载后出现

因此,首先,我向myToolStripMenuItem添加了一个DropDownOpen处理程序,它将是您命名的“插入操作…”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将准确地显示在我们希望它显示的时间和位置,而不会闪烁


注意:此方法将导致ToolTiptText的显示时间比正常情况稍长。当然,这是因为代码等待下拉菜单加载。此外,切换myToolStripMenuItem.Visible有时会导致菜单中出现闪烁。但是,我觉得这比显示一个你看不清楚的工具图文集要好得多。

你能在有工具提示的零件上添加示例代码吗?我使用ToolStripMenuItem的内置工具提示,因此除了设置工具图文集和自动工具提示(false)之外,没有其他工具提示的特殊代码属性,并将ContextMenuStrip的ShowItemToolTips属性设置为true。是否确实需要此行为?我的直觉告诉我,为每个菜单项添加那么多帮助信息似乎有点混乱……所有菜单项的弹出式帮助都是为新用户打开的,用户可以通过帮助菜单选择打开/关闭。