使用Windows窗体在按钮上显示工具提示


Answers:


222

ToolTip实际上是一个WinForms控件,用于处理在单个表单上显示多个元素的工具提示。

假设您的按钮称为MyButton。

  1. 将一个工具提示控件(在Windows窗体工具箱中的“通用控件”下)添加到窗体中。
  2. 给它起个名字-说MyToolTip
  3. 将MyButton的“在MyToolTip上的工具提示”属性(在按钮属性网格中的“杂项”下)设置为将鼠标悬停在其上时应显示的文本。

当光标悬停在按钮上时,工具提示将自动出现,但是如果您需要以编程方式显示它,请调用

MyToolTip.Show("Tooltip text goes here", MyButton)

在您的代码中显示工具提示,并在MyToolTip.Hide(MyButton)中使其再次消失。


很好,但有一个问题:如果表单中有多个按钮,则需要更多工具提示,或者可以为同一工具提示设置多个描述和按钮?
ghiboz 2014年

8
您的表单仅需要一个ToolTip控件-每个按钮可以具有不同的帮助文本(这就是“ MyToolTip上的Tooltip”是关联控件的属性,而不是ToolTip控件本身的属性的原因)
Dylan Beattie 2014年

2
在最简单的情况下,最好将工具提示添加到表单中。问题:在设计自定义控件时,您没有引用父窗体。解决方案:在控件中创建一个工具提示对象。不要认为ToolTip对象必然附加到窗体上。
斯特凡纳·古里科

93

使用表单设计器:

  • 将“工具提示”控件从“工具箱”拖到窗体上。
  • 选择要在其上显示工具提示的控件的属性。
  • 找到属性“ toolTip1上的ToolTip”(如果更改了默认名称,则名称可能不是toolTip1)。
  • 将属性的文本设置为要显示的工具提示文本。

您还可以使用以下调用以编程方式设置工具提示:

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");

45

您可以使用ToolTip类:

为控件创建工具提示

例:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}

1
这是完美的解决方案,因为它直接与自动生成的VS代码集成在一起。谢谢:)
anon58192932

@DaveK谢谢。这样更好,因为我可以在一个地方定义所有工具提示
fedeteka

谢谢。这个问题的最好,最直接的答案。
Najeeb

甚至更短:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf

6

对于默认工具提示,可以使用-

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


5

懒惰和紧凑地在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事件。为了使其紧凑,使用lambda表达式内联定义了MouseHover事件。如果任何悬停的按钮将其标签文本分配给工具提示并显示。


4

.NET框架提供了一个ToolTip类。将其中之一添加到您的表单中,然后在MouseHover事件上为每个您想要工具提示的项目执行以下操作:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }

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

4
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
secelite

0

基于DaveK的答案,我创建了一个控件扩展:

public static void SetToolTip(this Control control, string txt)
{
    new ToolTip().SetToolTip(control, txt);
}

然后,您可以使用任何一行为任何控件设置工具提示:

this.MyButton.SetToolTip("Hello world");

-4

当然,只需处理mousehover事件并告诉它显示工具提示。t是在全局变量或构造函数中使用以下命令定义的工具提示:

ToolTip t = new ToolTip();

然后是事件处理程序:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}

2
我认为您被否决了,因为那不是在Windows Forms中使用ToolTip控件的方式。您只需要在表单上添加一个这样的控件,它就会显示所有控件的提示。请参阅其他响应中的代码。
朱利安·梅尔维尔

1
我猜想解释与代码不匹配,我说在解释中要显示它,在代码中我也要初始化它。我的错。:P
Fry

2
@ julianz实际上,这对于拥有专门的工具提示非常有用,如果您希望根据状态而定的话,这些工具提示可以是动态的(当然要减去创建内容-原谅我,我只是想将所有内容都整合到一个块中。)相似的脉络……yshuditelu和Dylan Beattie相似,尽管没有实例化。
Fry
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.