ToolTipText 在控件下弹出

ToolTipText popping up underneath control

我有一个 .NET 应用程序,系统托盘中有一个 NotifyIcon。那个 nic 有一个 ContextMenuStrip,那个 ctx mnu 有几个 ToolStripMenuItems。他们中的大多数都将 ToolTipText 设置为 运行 时间。问题是大多数时候,ttp 会在 mnu 项下弹出。它将大部分或完全被 mnu 项目本身遮盖。根据我移动鼠标的位置,有时会在 mnu 上弹出 ttp,您可以完全看到它,但大多数时候不是。

一个 ttp 怎么可能在它的控制下弹出(从而使它变得无用)超出了我的理解范围,但是有人知道如何阻止这种行为吗?

这是设置它的代码。非常简单:

Dim mnu As ToolStripMenuItem = ctmMain.Items.OfType(Of ToolStripMenuItem).Where(Function(m) m.Tag IsNot Nothing AndAlso m.Tag = "EM_" & Account).First
mnu.ToolTipText = dt.Rows(0)("Display")

我试过在 ctx mnu 上循环 ShowItemToolTips(以及其他一些随机的东西),但没有任何改变这种行为。我要么需要解决这个问题,要么找到 ToolStripMenuItem.ToolTipText.

的一些简单替代方法

好吧,我在中途想出了这个问题,但我想我会 post 为遇到这种行为的任何其他人提供帮助。无论我尝试什么,ToolTipText 都不可行,但我能够将 ToolTip 控件添加到主窗体并劫持它。我将 ContextMenu 的 ShowItemToolTips 设置为 False 并手动处理 ToolTipText 文本的显示。

您不能将 ToolTip 控件与 ToolStripMenuItem 一起使用(因为后者不是控件),但是您可以将其与 ContextMenuStrip 一起使用,后者是 mnu 项目的父控件。因此,我为每个 ToolStripMenuItem 的 MouseEnter 和 MouseLeave 事件添加了处理程序,并将它们用于 display/hide 每个 mnu 项的 ToolTipText。这在很大程度上消除了弹出式问题。仍然偶尔会有奇怪的行为,但这是一个可行的解决方案。

Sub LoadMenus(acct As ToolStripMenuItem)
    AddHandler acct.MouseEnter, AddressOf EMToolTipShow
    AddHandler acct.MouseLeave, AddressOf EMToolTipHide
End Sub
Private Sub EMToolTipShow(sender As Object, e As EventArgs)
    ttpEM.Show(sender.ToolTipText, sender.GetCurrentParent())
End Sub
Private Sub EMToolTipHide(sender As Object, e As EventArgs)
    ttpEM.Hide(sender.GetCurrentParent())
End Sub