我有一个带有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上运行ShowItemToolTips (以及其他一些随机操作),但是没有什么能改变这个行为。我要么需要解决这个问题,要么找到一些简单的ToolStripMenuItem.ToolTipText替代方案。
发布于 2020-12-25 09:48:18
好吧,我在中途发现了这一点,但我想我应该把它发布给其他遇到这种行为的人。无论我怎么尝试,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 Subhttps://stackoverflow.com/questions/65444588
复制相似问题