Инструментальная панель 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");
Ответы
Ответ 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;
}