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

我正在向标签添加工具提示,如下所示:

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

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

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

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

 class ToolTipHelper { private static readonly Dictionary tooltips = new Dictionary(); public static ToolTip GetControlToolTip(string controlName) {  } } 

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

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

对任一版本也有用的是打开和关闭工具提示,你可以设置tt.Active true或false。

编辑

进一步改进:

 class ToolTipHelper { private static readonly Dictionary tooltips = new Dictionary(); public static ToolTip GetControlToolTip(string controlName) {  } 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"); 

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

 public class ToolTipHelper { private readonly Dictionary tooltips; ///  /// Constructor ///  public ToolTipHelper() { this.tooltips = new Dictionary(); } ///  /// Key a tooltip by its control name ///  ///  ///  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"); 

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

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

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

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

添加时你应该简单地使用.SetToolTip (Control,“hover时会出现的消息”)当你删除时,只需使用.SetToolTip (Control,null)将其设置为null。