我有一个winforms ContextMenuStrip,它为所有ToolStripMenuItem设置了ToolTipText。
其中一个菜单项“插入操作”具有关联的ToolStripDropDown子菜单。将鼠标移动到“插入操作”时,将自动显示下拉菜单,并显示与“插入操作”关联的工具提示,但会将其推送到ContextMenuStrip和下拉列表后面的背景中。
请点击此处查看问题的图片:http://www.screencast.com/t/GZkeBNcU
在打开子菜单后,我尝试以编程方式重新选择“插入操作”,但工具提示不会重新显示在顶部。
有什么想法吗?
或者有一种方法只在单击时显示插入操作的子菜单(而不是当鼠标移过它时自动显示)?我认为应该有一个设置,但一直无法找到它。
感谢您的帮助。
答案 0 :(得分:1)
好的,这不是非常优雅,所以忍受我。
似乎ToolTipText最初是在顶部绘制的,但是一旦下一个ToolStripMenuItems加载(在你的情况下由“Insert Action”引入的那些),两组MenuStrips都会在ToolTipText上方找到它们的路径。所以,我的动机是强制ToolTipText出现在新的MenuStrip加载之后。
所以,首先我将一个DropDownOpened处理程序添加到myToolStripMenuItem,这就是你命名为“Insert Action ...”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要好得多。