【问题标题】:Why does the ToolTip not appear when set to a long string?为什么工具提示设置为长字符串时不出现?
【发布时间】:2010-12-20 06:40:06
【问题描述】:

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

以下是代码:

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 行),它不会出现。有时它会显示一个空的工具提示。

我哪里出错了?

感谢您提前回复。

【问题讨论】:

  • 为什么每次都处理和重新创建ToolTip对象?
  • 假设它适用于较短的字符串,如果没有出现,请通过重复将长度减半,如果出现则将其增加 50%,找到仍然有效的最长长度。请发布指定的工具提示值,或者尝试一个非常简单的字符串(只是重复“abc”字符串)以确保其中没有任何特殊字符。
  • 处理和重新创建以避免内存泄漏。
  • @user460334:嗯,是的。如果要重新创建它,则需要处理旧的;这是正确的。问题是,为什么不每次要在控件上显示工具提示时重用 same ToolTip 对象,并且仅在窗体关闭时才释放它?

标签: .net vb.net winforms controls tooltip


【解决方案1】:

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

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

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

一般来说,您确实希望避免在提示中显示大量文本。它的可见时间不够长,无法让用户阅读中篇小说。考虑实施 F1 帮助作为替代方案。

【讨论】:

    【解决方案2】:

    工具提示不是为大量文本而设计的。随着字符数的增加,它的性能迅速下降。根据我的经验,它实际上最多只能使用大约 1000 个字符。超出此范围的任何内容都需要几秒钟才能出现。因此,它可能在实际呈现之前就消失了。我会尝试将 AutoPopDelay 设置为较高的数字,以查看它是否显示。

    【讨论】:

    • 我也面临同样的问题,所以我试图将工具提示显示为摘要。它与 .Net 编辑器工具中的一样。当代码折叠并将鼠标悬停在其上时,它会显示带有省略号的工具提示。那么谁能告诉我如何在工具提示中显示省略号?
    【解决方案3】:

    一方面会发生一些奇怪的事情,因为当工具提示弹出时,您将有一个鼠标离开事件,然后当工具提示消失时,您将有另一个鼠标进入事件,该事件会终止工具提示并开始一个新的。

    我通常会这样做:

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

    您只需要一个工具提示,只需在需要时为其提供不同的文本。并且您可以让表单在完成后处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2018-12-11
      • 2014-10-04
      相关资源
      最近更新 更多