Подсказка Windows Forms не появится снова после первого использования - PullRequest
23 голосов
/ 18 февраля 2009

У меня есть приложение Windows Forms C #, где я хотел бы использовать всплывающую подсказку для одного из текстовых полей. Я инициализирую всплывающую подсказку в конструкторе класса Form, и она работает с первого раза. Поэтому, когда я наводю указатель мыши на текстовое поле, оно работает, но как только всплывающая подсказка истекает и исчезает, она не появляется снова, когда я убираю мышь назад и возвращаюсь к элементу управления. Я ожидаю, что это вернется. Что я делаю не так?

Вот как я инициализирую всплывающую подсказку:

myTip = new ToolTip();
myTip.ToolTipIcon = ToolTipIcon.Info;
myTip.IsBalloon = true;
myTip.ShowAlways = true;

myTip.SetToolTip(txtMyTextBox,"My Tooltip Text");

Ответы [ 9 ]

23 голосов
/ 07 апреля 2009

У меня была похожая проблема сегодня. Иногда всплывающая подсказка не отображается. У меня был один элемент управления ToolTip для всех элементов управления в моей форме.

У меня также было событие MouseEnter на всех элементах управления, добавленных автоматически, поэтому я изменил событие MouseEnter, чтобы сделать:

_tooltip.Active = false;
_tooltip.Active = true;

Исправлена ​​ошибка, но я не знаю почему.

Кроме того, ошибка всегда возникала на компьютерах с Windows XP, но не на Windows Vista.

16 голосов
/ 06 июля 2010

Я думаю, вы будете рады узнать, что Microsoft знает об этом ... примерно через 5 лет ...

  • 2/21/2005 Ошибка, признанная воспроизводимой
  • 3/29/2005 Hum мы могли бы это исправить, но позже ...
  • 11/15/2005 Ну, на самом деле это не большая ошибка, и она не так уж много случается, поэтому мы не будем ее исправлять.

Черт, мне нравится, когда я сталкиваюсь с ошибками, которые Microsoft не хочет решать! На этот раз он называется угловой шкаф , в прошлый раз его просто было слишком трудно решить ...

http://connect.microsoft.com/VisualStudio/feedback/details/115385/tooltip-stop-showing-after-autopopdelay

Я ухожу, чтобы сообщить своему клиенту, что ошибки в моей программе - это просто угловые случаи, и их слишком сложно устранить ...

8 голосов
/ 15 марта 2011

У меня была похожая проблема сегодня. VS 2010 SP1 .Net 3.5
После AutoPopDelay-Time во всплывающей подсказке не отображаются элементы управления ToolTipText.
Решение Кевинса - единственный способ решить проблему.

Я инкапсулирую это в своем собственном классе подсказок:

public class ToolTip : System.Windows.Forms.ToolTip 
{
    public ToolTip() : base() { }

    public ToolTip(System.ComponentModel.IContainer components) : base(components) { }

    public new void SetToolTip(System.Windows.Forms.Control ctl, string caption) 
    {
        ctl.MouseEnter -= new System.EventHandler(toolTip_MouseEnter);
        base.SetToolTip(ctl, caption);
        if(caption != string.Empty)
        ctl.MouseEnter += new System.EventHandler(toolTip_MouseEnter);
    }

    private void toolTip_MouseEnter(object sender, EventArgs e) 
    {
        this.Active = false;
        this.Active = true;
    }
}
5 голосов
/ 18 февраля 2009

У меня была эта проблема в VB.NET. Что я сделал, так это сбросил элемент управления TooTip в форме, а затем в событии MouseHover целевого элемента управления я установил свойства всплывающей подсказки. Я сделал это, потому что я использовал один элемент управления ToolTip для пяти различных элементов управления Label. Это работало отлично. (Действительно, я хотел, чтобы всплывающая подсказка отображалась немедленно, поэтому вместо этого я использовал событие MouseEnter.) Я могу опубликовать свой точный код завтра, когда приступлю к работе.

1 голос
/ 31 января 2011

Я решил эту проблему этим

if (t == null)
{
    t = new ToolTip();
}
t.IsBalloon = true;
t.ToolTipTitle = "Stop";
t.ToolTipIcon = ToolTipIcon.Error;
t.Show("", yourControlonWhichToApplyToolTip, 0);

t.Show("PDescription", yourControlonWhichToApplyToolTip, 1000);

Обратите внимание, я добавил пустую подсказку.

1 голос
/ 10 апреля 2010

Как бы то ни было, у меня была эта проблема в моей системе Windows XP, пока я не заметил, что, если бы я поместил хотя бы один элемент управления всплывающей подсказки в форму вручную (из панели инструментов), я мог бы создать столько подсказок, сколько необходимо в моем коде и все они будут работать.

Однако, если бы я попытался создать все подсказки в коде (например, в событии formload), подсказки показывались бы только один раз и никогда больше не отображались. Я не могу дать вам точную историю «почему это происходит», но я повторил эту проблему несколько раз, всегда с одним и тем же эффектом. Возможно, это как-то связано с областью объекта, но я не уверен.

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

0 голосов
/ 30 июля 2016
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();

private void textBox_MouseHover(object sender, EventArgs e)
{
    ToolTip1.Show("YOUR TEXT", textBox);
}

private void textBox_MouseLeave(object sender, EventArgs e)
{
    ToolTip1.Active = false;
    ToolTip1.Active = true;
}
0 голосов
/ 14 декабря 2014

В моем случае после задания текста всплывающей подсказки с помощью метода SetToolTip я использовал перегрузку Show с параметром duration, т.е.

toolTip.Show(text, textEdit, 1000);

После этого всплывающая подсказка не появлялась при наведении мыши, а сброс tooltip.Active не работал ..

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

toolTip.Show(text, textEdit);
new Task(() =>
{
    Thread.Sleep(750);
    textEdit.Invoke(new Action(() => toolTip.Hide(textEdit)));
}).Start();

С этим кодом у меня желаемое поведение, т.е.

  1. Подсказка показывается сразу за 750 миллисекунд. после того, как текст всплывающей подсказки изменился
  2. Всплывающая подсказка появляется в течение указанного времени, когда мышь находится над элементом управления
0 голосов
/ 01 августа 2014

У меня только что была проблема в Windows 7, поэтому я нашел эту тему.

В моем случае это не сработало в tooltip_MouseEnter:

tooltip.Active = false;
tooltip.Active = true;

Итак, я попробовал следующее:

this.toolTip.SetToolTip(this.txtbx1, "tooltip-text");

Это сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...