Подтвердить что ты не робот

Инструментальная панель Windows Forms не будет отображаться после первого использования

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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;
    }
}

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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);

Заметьте, я добавил пустую подсказку.

Ответ 7

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

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

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

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

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

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

Ответ 8

В моем случае после установки текста всплывающей подсказки с помощью метода 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();

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

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

Ответ 9

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;
}