Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 首次使用后,Windows窗体工具提示将不会重新显示_C#_.net_Winforms_Tooltip - Fatal编程技术网

C# 首次使用后,Windows窗体工具提示将不会重新显示

C# 首次使用后,Windows窗体工具提示将不会重新显示,c#,.net,winforms,tooltip,C#,.net,Winforms,Tooltip,我有一个Windows Forms C#应用程序,我想在其中一个文本框上使用工具提示。我在Form类的构造函数中初始化了工具提示,它第一次工作。因此,当我将鼠标悬停在文本框上时,它会工作,但一旦工具提示超时并消失,当我将鼠标移离并返回到控件上时,它不会重新出现。我希望它会回来。我做错了什么 以下是我如何初始化工具提示: myTip = new ToolTip(); myTip.ToolTipIcon = ToolTipIcon.Info; myTip.IsBalloon = true; myTi

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

以下是我如何初始化工具提示:

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

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

我在VB.NET中遇到了这个问题。我所做的是在表单上放置一个TooTip控件,然后在目标控件的MouseHover事件上设置工具提示的属性。我这样做是因为我对五个不同的标签控件使用了一个工具提示控件。效果很好。(真的,我希望工具提示立即显示出来,所以我改用了MouseEnter事件。)我可以在明天上班的时候发布准确的代码。

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

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

_tooltip.Active = false;
_tooltip.Active = true;
它修复了错误,但我不知道为什么


同样,这个错误总是发生在Windows XP机器上,但在Windows Vista上却没有发生。

值得一提的是,我在Windows XP系统上遇到了这个问题,直到我注意到,如果我手动(从工具箱)在窗体上放置至少一个工具提示控件,我可以在代码中创建所需的任意多个工具提示,它们都可以工作

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


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

我想你会很高兴知道Microsoft知道这一点……大约5年了

  • 2005年2月21日确认缺陷可复制
  • 2005年3月29日哼哼我们可能会修复它,但稍后
  • 2005年11月15日其实这不是一个大错误,也不会发生太多,所以我们不会修复它
该死的,当我偶然发现微软不想解决的错误时,我喜欢它!这一次被称为角落案件,上次太难解决了


我要告诉我的客户,我的程序中的错误只是一些小问题,很难解决…

我用这个方法解决了这个问题

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

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

我今天遇到了类似的问题。VS 2010 SP1.Net 3.5
自动复制延迟时间后,工具提示不显示控件
ToolTipText

凯文的解决方案是解决问题的唯一途径

我将其封装在自己的工具提示类中:

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

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

在我的例子中,这在工具提示鼠标中不起作用:

tooltip.Active = false;
tooltip.Active = true;
因此,我尝试了以下方法:

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

这对我来说效果很好。

在我的例子中,在使用
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毫秒。更改工具提示文本后
  • 当鼠标悬停在控件上时,工具提示将在指定的时间内显示

  • 事实上,我是自己想出来的,但我用了你的想法。这帮助我在Windows7上编写了一个程序,并尝试在WindowsXP上运行我的工具提示。在用你的提示重新构建我的应用程序后,效果非常好。THXYes-我在XP机器上也有这个问题,但不是Vistat。它工作得很好。为了避免手动事件挂钩,可以使用foreach(Control.Controls.OfType()中的var label)label.MouseEnter+=(s,ea)=>{Main\u Tooltip.Active=false;Main\u Tooltip.Active=true;};另外,我在XP下的DirectX9应用程序中使用工具提示,在这种特殊情况下似乎不起作用。虽然我希望我从来没有修复过框架错误,但当我这样做时,我很欣赏这种简单易行的修复。谢谢
    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;
    }