Почему всплывающая подсказка не отображается, если задана длинная строка? - PullRequest
1 голос
/ 20 декабря 2010

Я работаю в 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 ]

2 голосов
/ 21 декабря 2010

ToolTip.SetToolTip использует сообщение TTM_SETTOOLINFO для обновления всплывающей подсказки.Документы SDK для этого сообщения содержат следующую фразу:

При вызове TTM_SETTOOLINFO строка, на которую указывает член lpszText структуры TOOLINFO, не должна превышать 80 TCHAR, включая завершающий NULL.*

Это дорогой способ сказать, что обновленный текст подсказки не может быть длиннее 80 символов.Этот предел был расширен в более поздних версиях Windows, вы не сказали, какой из них вы используете.

В общем, вы действительно хотите избежать отображения большого количества текста в подсказке.Он не виден достаточно долго, чтобы позволить пользователю прочитать новеллу.Рассмотрите возможность использования справки F1 в качестве альтернативы.

0 голосов
/ 21 декабря 2010

Во-первых, могут произойти некоторые странные вещи, потому что, когда всплывающая подсказка всплывет, у вас будет событие отпускания мыши, а затем, когда всплывающая подсказка всплывет, у вас будет еще одно событие ввода мыши, которое убивает подсказку и запускает новую.

Обычно я просто делаю это:

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

Вам нужна только одна подсказка, просто дайте ей другой текст, когда вам нужно.И вы можете позволить форме беспокоиться об утилизации, когда это будет сделано.

0 голосов
/ 21 декабря 2010

Подсказка не была предназначена для большого количества текста.Его производительность быстро снижается по мере увеличения числа персонажей.По моему опыту, в нем можно использовать до 1000 символов.Все, что происходит, занимает несколько секунд, чтобы появиться.Как таковой, он может исчезнуть до того, как он действительно рендерится.Я попытался бы установить AutoPopDelay на большое число, чтобы увидеть, показывает ли оно вообще.

...