【发布时间】:2010-09-15 04:13:33
【问题描述】:
如何使用Windows Forms 在按钮上显示工具提示?
【问题讨论】:
-
以下文章用视觉效果最好地解释它:http://www.dotnetperls.com/tooltip
标签: .net winforms button tooltip
如何使用Windows Forms 在按钮上显示工具提示?
【问题讨论】:
标签: .net winforms button tooltip
ToolTip 是一个single WinForms 控件,用于处理在单个表单上显示多个 元素的工具提示。
假设您的按钮名为 MyButton。
当光标悬停在按钮上时,工具提示会自动出现,但如果您需要以编程方式显示,请调用
MyToolTip.Show("Tooltip text goes here", MyButton);
在您的代码中显示工具提示,并且
MyToolTip.Hide(MyButton);
让它再次消失。
【讨论】:
使用表单设计器:
您还可以使用以下调用以编程方式设置工具提示:
this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
【讨论】:
您可以使用 ToolTip 类:
Creating a ToolTip for a Control
例子:
private void Form1_Load(object sender, System.EventArgs e)
{
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.Button1, "Hello");
}
【讨论】:
对于默认工具提示,可以使用 -
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");
如果工具提示消息需要格式化,也可以使用自定义工具提示。这可以通过自定义格式化表单来创建,并将其用作控件鼠标悬停事件的工具提示对话框。请查看以下链接了解更多详情 -
http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html
【讨论】:
.NET 框架提供了一个 ToolTip 类。将其中一个添加到您的表单中,然后在您想要工具提示的每个项目的 MouseHover 事件上,执行以下操作:
private void checkBox1_MouseHover(object sender, EventArgs e)
{
toolTip1.Show("text", checkBox1);
}
【讨论】:
在 Tag 属性中懒惰而紧凑地存储文本
如果您有点懒惰并且不将控件的 Tag 属性用于其他任何内容,您可以使用它来存储工具提示文本并分配 MouseHover 事件处理程序像这样一次性控制所有这些控件:
private System.Windows.Forms.ToolTip ToolTip1;
private void PrepareTooltips()
{
ToolTip1 = new System.Windows.Forms.ToolTip();
foreach(Control ctrl in this.Controls)
{
if (ctrl is Button && ctrl.Tag is string)
{
ctrl.MouseHover += new EventHandler(delegate(Object o, EventArgs a)
{
var btn = (Control)o;
ToolTip1.SetToolTip(btn, btn.Tag.ToString());
});
}
}
}
在这种情况下,所有在 Tag 属性中具有字符串的按钮都会被分配一个 MouseHover 事件。为了保持紧凑,MouseHover 事件是使用 lambda 表达式内联定义的。如果任何悬停的按钮都将其标签文本分配给工具提示并显示出来。
【讨论】:
private void Form1_Load(object sender, System.EventArgs e)
{
ToolTip toolTip1 = new ToolTip();
toolTip1.AutoPopDelay = 5000;
toolTip1.InitialDelay = 1000;
toolTip1.ReshowDelay = 500;
toolTip1.ShowAlways = true;
toolTip1.SetToolTip(this.button1, "My button1");
toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}
【讨论】:
基于DaveK's answer,我创建了一个控件扩展:
public static void SetToolTip(this Control control, string txt)
{
new ToolTip().SetToolTip(control, txt);
}
然后您可以为任何控件设置工具提示,只需一行:
this.MyButton.SetToolTip("Hello world");
【讨论】:
当然,只需处理鼠标悬停事件并告诉它显示工具提示即可。 t 是在全局变量或构造函数中定义的工具提示:
ToolTip t = new ToolTip();
然后是事件处理程序:
private void control_MouseHover(object sender, EventArgs e)
{
t.Show("Text", (Control)sender);
}
【讨论】: