我目前正在向标签添加工具提示,如下所示:
ToolTip LabelToolTip = new System.Windows.Forms.ToolTip();
LabelToolTip.SetToolTip(this.LocationLabel, text);
当我需要随着标签文本的变化而更改此工具提示时,我会尝试执行相同的操作以添加新的工具提示。不幸的是,旧的工具提示仍然在新的工具提示下,这真的很烦人。有没有办法删除旧的工具提示,或者当我想更改标签中的文本时我应该只制作一个新标签?
创建单个实例,ToolTip
并在您喜欢使用方法显示它时使用它,SetToolTip
并使用Hide
方法隐藏它。通常不需要创建多个ToolTip
实例。
工具提示对象同时在多个控件中工作。
创建工具提示的单个实例并将其用于添加和删除任何控件的工具提示。
添加时,您应该简单地使用 .SetToolTip (Control, "Message that will aear when hover") 删除时,您只需使用.SetToolTip (Control, null)将其设置回null。
我修改了 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);
}
}
所以现在,在程序的任何地方设置一个 ToolTip 只是一行:
ToolTipHelper.SetToolTip(button1, "This is my button1 tooltip");
如果您不需要访问旧功能,您可以将它们组合起来和/或将它们设为私有,因此这SetToolTip()
是您唯一使用过的功能。
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");
要简单地从控件中删除工具提示,您可以像这样修改类:
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, "" )
我有同样的问题 。我在设计表单中添加了一个 tooTip 组件并使用它。我在我想要工具提示文本的控件的属性窗口的 Misc 部分中定义了一个类似“”的文本。之后,每次我为我的组件更改工具提示测试时,它都不会出现之前分配的测试并且运行良好。
在表单代码中:
public ToolTip toolTip1;
(请注意,当向表单添加工具提示时,代码生成器会创建上述行,我将其修饰符更改为 public 因为它是必需的,但如果您不需要它,请不要更改它)
在程序中更改控件的工具提示文本:
toolTip1.SetToolTip(myControl, "The text I want to appear");