2009-07-22 47 views
12

我目前添加工具提示标签,像这样:如何删除当前绑定到控件的工具提示?

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

当我需要改变这种提示为标签的文本改变,我尝试做同样添加一个新的提示。不幸的是,旧的工具提示仍在新的工具提示下,这真的很烦人。是否有一种方法可以删除旧的工具提示,或者当我想更改标签中的文本时,是否应该创建一个新标签?

回答

15

创建ToolTip的单个实例,并在您喜欢的时候使用它来使用SetToolTip方法显示它并使用Hide方法隐藏它。通常不需要创建多个ToolTip实例。

+2

啊,所以我应该只有一个类实例变量来存放一个ToolTip对象,并在需要修改时重新使用它。非常感谢。 – benmatth 2009-07-22 14:16:52

4
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"); 
5

我修改加文·史蒂文斯的代码,使其所有静态像这样:

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

如果你不” t需要访问旧功能,您可以将它们结合起来和/或将它们设为私有,所以SetToolTip()是我们唯一的一个即

+0

我认为加文史蒂文斯值得信任,但我喜欢静态解决方案。没有深入细节,我有一个非常复杂的形式,有100多个控件,每个表单提交时都有工具提示,所以你不可能杀死那些旧的。这种解决方案使我避免了相当多的头痛。 – 333Matt 2013-06-18 18:49:39

+0

是的,静态更好! – 2014-05-02 22:37:51

3

要简单地从控制删除提示,你可以修改类是这样的:

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, "") 
0

的工具提示对象在多个控制工作在相同时间。

创建工具提示的单个实例并将其用于添加和删除任何控件的工具提示。

当添加您只需要使用 .SetToolTip(控制,“消息时,悬停,将apear”)当删除 你只是.SetToolTip设置回空(控制,空)。

相关问题