24

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

这是我初始化工具提示的方式:

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

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

9 回答 9

25

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

我在所有自动添加的控件上也有一个 MouseEnter 事件,所以我修改了 MouseEnter 事件:

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

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

此外,该错误总是发生在 Windows XP 机器上,但不会发生在 Windows Vista 上。

于 2009-04-07T17:48:23.687 回答
17

我想你会很高兴知道微软知道这件事……大约 5 年了……

  • 2/21/2005 错误确认为可重现
  • 3/29/2005 嗯,我们可能会修复它,但稍后......
  • 2005 年 11 月 15 日其实这不是一个大错误,也不会发生太多,所以我们不会修复它。

该死的,当我偶然发现微软不想解决的错误时,我喜欢它!这一次叫绝境,上一次实在是太难解决了……

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

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

于 2010-07-06T10:10:09.393 回答
8

我今天遇到了类似的问题。VS 2010 SP1 .Net 3.5
在 AutoPopDelay-Time 之后 ToolTip 不显示 Controls 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;
    }
}
于 2011-03-15T07:49:34.500 回答
5

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

于 2009-02-18T03:21:19.183 回答
1

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

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

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

于 2010-04-09T22:38:31.853 回答
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);

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

于 2011-01-31T09:46:05.417 回答
1

我刚刚在 Windows 7 上遇到了问题,所以我找到了这个线程。

就我而言,这在 tooltip_MouseEnter 中不起作用:

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

所以我尝试了以下方法:

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

这对我来说很好。

于 2014-08-01T07:02:58.520 回答
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. 当鼠标悬停在控件上时,工具提示确实会出现指定时间
于 2014-12-14T12:16:50.273 回答
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;
}
于 2016-07-30T09:13:40.303 回答