为什么设置为长字符串时不显示工具提示?

时间:2010-12-20 06:40:06

标签: .net vb.net winforms controls tooltip

我在VB.Net 2010 framework 2.0中工作。 我正在为工具提示对象设置一个大字符串。在这种情况下,工具提示不会出现。如果字符串很短(比如10行),则正确显示tooptip。

以下是代码:

Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs)
    If _showToolTip Then
        If Not IsNothing(_tooltipDSPanel) Then
            _tooltipDSPanel.Dispose()
            _tooltipDSPanel = Nothing
        End If
        _tooltipDSPanel = New ToolTip
        _tooltipDSPanel.SetToolTip(Me, PanelText)
    End If
End Sub

如果“PanelText”太长(比如50行),则不会出现。有时它会显示一个空的工具提示。

我哪里错了?

感谢您提前回复。

3 个答案:

答案 0 :(得分:2)

ToolTip.SetToolTip使用TTM_SETTOOLINFO消息更新工具提示。此消息的SDK文档包含以下短语:

  

当调用TTM_SETTOOLINFO时,   lpszText指向的字符串   TOOLINFO结构的成员必须   长度不超过80 TCHAR,   包括终止NULL。

这是一种昂贵的说法,即更新的提示文字不能超过80个字符。此限制已在Windows的更高版本中进行了扩展,您没有说明您正在使用哪个。

通常,您确实希望避免在提示中显示大量文本。它的长度不足以让用户阅读中篇小说。考虑将F1帮助作为替代方案。

答案 1 :(得分:0)

工具提示不适用于大量文字。随着字符数量的增加,其性能会迅速下降。根据我的经验,它实际上只能使用大约1000个字符。任何事情都需要几秒钟才会出现。因此,它可能在实际渲染之前消失。我会尝试将 AutoPopDelay 设置为较大的数字,以查看它是否显示。

答案 2 :(得分:0)

有一件事情会发生一些奇怪的事情,因为当工具提示弹出时你将有一个鼠标离开事件,然后当工具提示结束时,你将有另一个鼠标输入事件,它杀死工具提示并开始一个新的。

我通常会这样做:

   If _showToolTip Then
            _tooltipDSPanel.SetToolTip(Me, PanelText)
   End If

您只需要一个工具提示,只需在需要时提供不同的文本即可。而且你可以让表格担心在完成它之后处理它。