如何删除当前绑定到控件的工具提示?

时间:2009-07-22 14:09:23

标签: c# .net winforms tooltip

我目前正在为这样的标签添加工具提示:

ToolTip LabelToolTip = new System.Windows.Forms.ToolTip();
LabelToolTip.SetToolTip(this.LocationLabel, text);

当我需要在标签文本发生变化时更改此工具提示时,我会尝试添加新的工具提示。不幸的是,旧的工具提示仍然在新的工具提示下,这真的很烦人。有没有方法可以删除旧的工具提示,或者我想在更改标签中的文字时创建新标签?

6 个答案:

答案 0 :(得分:18)

创建ToolTip的单个实例,并在您希望使用SetToolTip方法显示它时使用它,并使用Hide方法隐藏它。通常,不必创建多个ToolTip实例。

答案 1 :(得分:4)

我修改了Gavin Stevens的代码,使其全部变为静态:

class ToolTipHelper
{
    private static readonly Dictionary<string, ToolTip> tooltips = new Dictionary<string, ToolTip>();

    public static ToolTip GetControlToolTip(string controlName)
    {
        <same as above>
    }
}

现在您不再需要实例化ToolTipHelper(因此它不需要构造函数),因此您现在可以从任何类中访问它,如下所示:

ToolTip tt = ToolTipHelper.GetControlToolTip("button1");
tt.SetToolTip(button1, "This is my button1 tooltip");

对于任何一个版本,同样有用的是打开和关闭工具提示,您只需设置tt.Active为true或false。

修改

进一步改进:

class ToolTipHelper
{
    private static readonly Dictionary<string, ToolTip> tooltips = new Dictionary<string, ToolTip>();
    public static ToolTip GetControlToolTip(string controlName)
    {
        <same as above still>
    }
    public static ToolTip GetControlToolTip(Control control)
    {
        return GetControlToolTip(control.Name);
    }
    public static void SetToolTip(Control control, string text)
    {
        ToolTip tt = GetControlToolTip(control);
        tt.SetToolTip(control, text);
    }
}

现在,从程序中的任何位置设置工具提示只需一行:

ToolTipHelper.SetToolTip(button1, "This is my button1 tooltip");

如果您不需要访问旧功能,可以将它们组合使用和/或将它们设为私有功能,因此SetToolTip()是您唯一使用过的功能。

答案 2 :(得分:4)

工具提示对象同时在多个控件中工作。

  

创建ToolTip的单个实例,并使用它来添加和删除任何Control的工具提示。

     
    

添加时,您应该只使用     .SetToolTip(控制,&#34;悬停&#34时会出现的消息;)     删除时,只需使用.SetToolTip(Control,null)将其设置为null。

  

答案 3 :(得分:3)

public class ToolTipHelper
{
    private readonly Dictionary<string, ToolTip> tooltips;

    /// <summary>
    /// Constructor
    /// </summary>
    public ToolTipHelper()
    {
        this.tooltips = new Dictionary<string, ToolTip>();
    }

    /// <summary>
    /// Key a tooltip by its control name
    /// </summary>
    /// <param name="controlName"></param>
    /// <returns></returns>
    public ToolTip GetControlToolTip(string controlName)
    {
        if (tooltips.ContainsKey(controlName))
        {
            return tooltips[controlName];
        }
        else
        {
            ToolTip tt = new ToolTip();
            tooltips.Add(controlName, tt);
            return tt;
        }
    }
}

用法:

var tt = toolTips.GetControlToolTip("button1");
tt.SetToolTip(button1, "This is my button1 tooltip");
tt = toolTips.GetControlToolTip("button2");
tt.SetToolTip(button2, "This is my button2 tooltip");

答案 4 :(得分:2)

要简单地从控件中删除工具提示,您可以像这样修改类:

public static void SetToolTip( Control control, string text )
    {
        if ( String.IsNullOrEmpty( text ) )
        {
            if ( tooltips.ContainsKey(control.Name ) )
            {
                GetControlToolTip( control ).RemoveAll();
                tooltips.Remove( control.Name );
            }
        }
        else
        {
            ToolTip tt = GetControlToolTip( control );
            tt.SetToolTip( control, text );
        }
    }

并使用此命令:

ToolTipHelper.SetToolTip( control, "" )

答案 5 :(得分:0)

我有同样的问题。我在设计表单中添加了tooTip组件并使用了它。我想在控件的属性窗口的“其他”部分中定义一个类似“”的文本,以获取工具提示文本。之后,每次我更改组件的工具提示测试时,它都不会出现先前分配的测试,并且效果很好。

在表单代码中:

public ToolTip toolTip1;

(请注意,当将toolTip添加到表单中时,代码生成器会创建上述行,由于需要它,因此将其修饰符更改为public,但如果不需要,则不要更改它)

在程序中更改控件的工具提示文本:

toolTip1.SetToolTip(myControl, "The text I want to appear");