Windows Forms ToolTip在首次使用后不会重新出现
我有一个Windows Forms C#应用程序,我想在其中一个文本框上使用工具提示。 我在Form类的构造函数中初始化工具提示,它第一次工作。 因此,当我用鼠标将鼠标hover在文本框上时,它会起作用,但是一旦工具提示超时并且它消失,当我将鼠标移开并返回到控件上时,它不会重新出现。 我希望它能回来。 我究竟做错了什么?
以下是我初始化工具提示的方法:
myTip = new ToolTip(); myTip.ToolTipIcon = ToolTipIcon.Info; myTip.IsBalloon = true; myTip.ShowAlways = true; myTip.SetToolTip(txtMyTextBox,"My Tooltip Text");
我今天遇到了类似的问题。 有时,工具提示不会显示。 我有一个ToolTip控件用于表单中的所有控件。
我在自动添加的所有控件上都有一个MouseEnter事件,所以我修改了MouseEnter事件:
_tooltip.Active = false; _tooltip.Active = true;
它修复了错误,但我不知道为什么。
此外,该错误始终发生在Windows XP计算机上,但不发生在Windows Vista上。
我想你会很高兴知道微软知道它…大约5年……
- 2/21/2005 Bug被认为是可重现的
- 3/29/2005 Hum我们可能会修复它,但后来……
- 2005年11月15日实际上这不是一个大错误,它不会发生太多,所以我们不会解决它。
该死的我喜欢它,当我偶然发现微软不想解决的错误! 这次它被称为角落案例 ,上次很难解决 ……
我要告诉我的客户我的程序中的错误只是极端情况而且难以解决……
我今天遇到了类似的问题。 VS 2010 SP1 .Net 3.5 AutoPopDelay-Time后,ToolTip不显示Controls ToolTipText。 Kevins解决方案是解决问题的唯一方法。 我将它封装在我自己的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; } }
我在VB.NET中遇到过这个问题。 我做的是在窗体上放一个TooTip控件,然后在目标控件的MouseHover事件上,我设置了ToolTip的属性。 我这样做是因为我使用了一个ToolTip控件来实现五个不同的Label控件。 它运作得很好。 (实际上,我希望工具提示立即显示,所以我使用了MouseEnter事件。)我可以在明天上class时发布我的确切代码。
我解决了这个问题
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);
注意我添加了一个空的工具提示。
为了它的价值,我在我的Windows XP系统上遇到了这个问题,直到我注意到如果我手动(在工具箱中)在我的表单上放置了至少一个工具提示控件,我可以根据需要在我的代码中创建尽可能多的工具提示,并且一切都会奏效。
但是,如果我尝试在代码中创建所有工具提示(例如在formload事件中),则提示只显示一次,永远不会再次显示。 我不能给你确切的“为什么会发生这种情况”的故事,但我已经多次重复这个问题并且效果相同。 它可能与对象范围有关,但我不确定。
所以现在作为一种习惯,我总是包含至少一个Visual Studio工具提示控件,然后在我的代码中包含其余部分。
我刚刚遇到了Windows 7上的问题所以我发现了这个post。
在我的情况下,这在tooltip_MouseEnter中不起作用:
tooltip.Active = false; tooltip.Active = true;
所以我尝试了以下内容:
this.toolTip.SetToolTip(this.txtbx1, "tooltip-text");
这对我来说很好。
在我使用SetToolTip
方法设置工具提示文本后,我使用了Show
overload with duration
参数,即
toolTip.Show(text, textEdit, 1000);
之后,工具提示没有重新出现在鼠标hover上,并且重置tooltip.Active
不起作用..
对我有用的解决方法是使用不带持续时间的Show
重载,然后手动隐藏它:
toolTip.Show(text, textEdit); new Task(() => { Thread.Sleep(750); textEdit.Invoke(new Action(() => toolTip.Hide(textEdit))); }).Start();
使用此代码,我有所需的行为,即
- 工具提示一次显示750毫秒。 工具提示文本更改后
- 当鼠标hover在控件上时,工具提示会在指定时间内出现
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; }