【问题标题】:ToolTipText popping up underneath controlToolTipText 在控件下弹出
【发布时间】:2020-12-25 09:54:27
【问题描述】:

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

一个 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 的一些简单替代方法。

【问题讨论】:

    标签: c# vb.net tooltip contextmenustrip


    【解决方案1】:

    好吧,我在中途发现了这一点,但我想我会把它发布给遇到这种行为的其他人。无论我尝试什么,ToolTipText 都不可行,但我能够将 ToolTip 控件添加到主窗体并劫持它。我将 ContextMenu 的 ShowItemToolTips 设置为 False 并手动处理 ToolTipText 文本的显示。

    您不能将 ToolTip 控件与 ToolStripMenuItem 一起使用(因为后者不是控件),但是您可以将它与 ContextMenuStrip 一起使用,后者是 mnu 的父控件。因此,我为每个 ToolStripMenuItem 的 MouseEnter 和 MouseLeave 事件添加了处理程序,并使用它们来显示/隐藏每个 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      相关资源
      最近更新 更多