如何删除当前绑定到控件的工具提示?
我正在向标签添加工具提示,如下所示:
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。