Windows Forms ToolTip在首次使用后不会重新出现

时间:2009-02-18 03:16:21

标签: c# .net winforms tooltip

我有一个Windows Forms C#应用程序,我想在其中一个文本框中使用工具提示。我在Form类的构造函数中初始化工具提示,它第一次工作。因此,当我用鼠标将鼠标悬停在文本框上时,它可以工作,但是一旦工具提示超时并且它消失,当我将鼠标移开并返回到控件上时,它不会重新出现。我希望它会回来。我做错了什么?

以下是我初始化工具提示的方法:

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

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

9 个答案:

答案 0 :(得分:23)

我今天遇到了类似的问题。有时,工具提示不会显示。我的表单中的所有控件都有一个ToolTip控件。

我自动添加了所有控件上的MouseEnter事件,因此我修改了MouseEnter事件:

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

它修复了错误,但我不知道为什么。

此外,该错误始终发生在Windows XP计算机上,但不会发生在Windows Vista上。

答案 1 :(得分:16)

我想你会很高兴知道微软知道它...大约5年......

  • 2/21/2005错误确认为可重现
  • 3/29/2005嗯我们可能会解决它,但后来......
  • 2005年11月15日实际上它并不是一个大错误,它不会发生太多,所以我们不会修复它。
当我偶然发现微软不想解决的错误时,该死的我喜欢它!这次它被称为角落案例,上次只是太难解决 ......

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

我要告诉我的客户我的程序中的错误只是极端情况而且难以解决......

答案 2 :(得分:8)

我今天遇到了类似的问题。 VS 2010 SP1 .Net 3.5
AutoPopDelay-Time后,工具提示不显示控件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;
    }
}

答案 3 :(得分:5)

我在VB.NET中遇到过这个问题。我做的是在窗体上放置一个TooTip控件,然后在目标控件的MouseHover事件上,我设置了ToolTip的属性。我这样做是因为我使用了一个ToolTip控件来实现五个不同的Label控件。它运作得很好。 (实际上,我希望工具提示立即显示,所以我使用了MouseEnter事件。)我可以在明天上班时发布我的确切代码。

答案 4 :(得分:1)

为了它的价值,我在Windows XP系统上遇到了这个问题,直到我注意到如果我手动(在工具箱中)在我的表单上放置了至少一个工具提示控件,我可以根据需要在我的代码中创建多个工具提示,他们都会工作。

但是,如果我尝试在代码中创建所有工具提示(例如在formload事件中),则提示只显示一次,永远不会再次显示。我不能给你确切的“为什么会发生这种情况”的故事,但我已经多次重复这个问题并且效果相同。它可能与对象范围有关,但我不确定。

所以现在作为一种习惯,我总是至少包含一个Visual Studio工具提示控件,然后是我的代码中的其余部分。

答案 5 :(得分:1)

我通过这个解决了这个问题

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

注意我添加了一个空的工具提示。

答案 6 :(得分:0)

我刚刚遇到了Windows 7上的问题所以我找到了这个帖子。

在我的情况下,这在tooltip_MouseEnter中无效:

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

所以我尝试了以下内容:

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

这对我来说很好。

答案 7 :(得分:0)

在我使用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. 当鼠标悬停在控件上时,工具提示会显示指定的时间

答案 8 :(得分:0)

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