ToolTipText 在控件下方弹出

问题描述

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

解决方法

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

不能将 ToolTip 控件与 ToolStripMenuItem 一起使用(因为后者不是控件),但是您可以将它与 ContextMenuStrip 一起使用,后者是 mnu itms 的父控件。因此,我为每个 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...