Что заставляет .NET ToolTip не работать во второй раз? - PullRequest
3 голосов
/ 24 декабря 2010

Используя настольный проект VB.NET 2008, я создал простую подсказку для события Form_Load и прикрепил ее к кнопке на форме.Отлично смотрится, когда пользователь наводит курсор на кнопку, но время ожидания истекает через 30 секунд (которые я установил с помощью задержки всплывающего окна и т. Д.)Но как только он исчезает, второй раз, когда пользователь наводит курсор на кнопку, всплывающая подсказка не появляется.Почти как умирает естественная смерть!Есть идеи как это исправить?

Ответы [ 2 ]

5 голосов
/ 24 декабря 2010

Оказывается, что ToolTip компонент не будет показывать подсказку во второй раз, если истекло время первой подсказки.
Я полагаю, что это "особенность", а не ошибка, но я согласен, что это не ожидаемое поведение для многих людей. Об этом сообщили в Microsoft , который считает, что это "слишком сложный случай, чтобы инвестировать в его исправление".

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

Первый обходной путь, который я бы предложил вам попробовать, - это то, что предлагает ответ Кевина: установите для свойства Active компонента ToolTip значение False, а затем верните значение True в событии MouseEnter для каждого элемента управления, который вы хотите отобразить. сказал всплывающую подсказку. Это в основном «перезагрузит» компонент и переопределит «функцию», которая заставляет его не показываться второй раз, когда он истекает в первый раз.

Некоторые другие предложения, предложенные в ответах, достигают того же результата несколько иным (и более бессмысленным) способом: создавая новый ToolTip компонент каждый раз, когда пользователь перемещает мышь над контролем. На самом деле нет причин, по которым это лучше или что оно будет работать, если вышеупомянутое предложение не сработает.

Что касается того, почему всплывающая подсказка перестает работать только через 30 секунд, то фактическое максимальное время ожидания составляет примерно 32 секунды. Компонент, предоставляемый .NET Framework, является просто оболочкой для всплывающей подсказки Win32, которую документация раскрывает как источник произвольного ограничения. Значение времени ожидания указывается в виде 16-разрядного значения со знаком, которое принимает максимальное значение только 32767, что означает задержку чуть более 32 секунд. Раймонд Чен также опубликовал запись в блоге об этом точном поведении.

0 голосов
/ 20 марта 2016

Создайте событие наведения мыши (значок молнии в свойствах, в данном случае моего текстового поля) для вашего текстового поля или другого элемента управления, который вы хотите использовать, и вызовите свою процедуру. Я назвал мой activtivate_tooltip.

Private Sub reactivate_tooltip(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.MouseEnter
        ToolTip1.Active = False
        ToolTip1.Active = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...