如何给控件添加工具提示?

176

我希望在鼠标悬停在控件上时显示一个工具提示ToolTip

如何在代码和设计器中创建工具提示?


可能是 在文本上鼠标悬停时显示工具提示 的重复问题。 - Jim Fell
相关的,而且还比较老(适用于.NET一般):https://dev59.com/nnVC5IYBdhLWcg3w1E7w - Knowledge Cube
6个回答

231

这里是您使用代码实现它的文章。

private void Form1_Load(object sender, System.EventArgs e)
{
     // Create the ToolTip and associate with the Form container.
     ToolTip toolTip1 = new ToolTip();

     // Set up the delays for the ToolTip.
     toolTip1.AutoPopDelay = 5000;
     toolTip1.InitialDelay = 1000;
     toolTip1.ReshowDelay = 500;
     // Force the ToolTip text to be displayed whether or not the form is active.
     toolTip1.ShowAlways = true;

     // Set up the ToolTip text for the Button and Checkbox.
     toolTip1.SetToolTip(this.button1, "My button1");
     toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}

5
那么我猜如果 toolTip1 变量超出范围也无所谓了? - Svish
2
所有窗体都使用一个静态的“ToolTip”怎么样? - Svish
8
只有当按钮和复选框不再引用它时,它才会被释放,但实际上按钮和复选框仍会引用它,因此它不会被释放。 - Rowland Shaw
2
他们在引用它,因为“SetToolTip”会向按钮和复选框的事件添加EventHandlers。 - Eduardo Wada
3
把工具提示放到静态变量里面是个不好的主意。如果一个窗体被关闭再重新打开,那么SetTooltip还能正常工作吗?如果可以,那么已经关闭的窗体的处理程序是否会正确地从内存中移除?我甚至不会花费一分钟来测试它。最好使用成员变量,这样更可靠! - Elmue
显示剩余6条评论

158

从工具箱中将工具提示控件拖到您的表单上。除名称外,您实际上不需要给它任何属性。然后,在要在其上显示工具提示的控件的属性中,查找一个名为刚刚添加的工具提示控件名称的新属性。当光标悬停在控件上时,默认情况下将提供工具提示。


71
确保在执行此操作时(例如在凌晨2点),使用的是ToolTip控件而不是ToolStrip控件。 - Adrian K
6
通过这个答案,只需向winform添加一个工具提示,即可为表单中的所有控件提供自己的工具提示。 - SAm
1
以其简洁而强大著称,只需确保将其放置在正确的控件上,而不是相邻的控件上(比如在凌晨2点)。 - Michael Stimson
双击工具提示控件将其添加到表单中。 - CAD bloke

48
  1. 在您的表单中添加一个ToolTip组件
  2. 选择您想要工具提示的控件之一
  3. 打开属性网格(F4),在列表中您会找到一个名为“ToolTip on toolTip1”(或类似名称)的属性。在该属性上设置所需的工具提示文本。
  4. 重复第2-3步进行其他控件的设置
  5. 完成。

这里的诀窍是ToolTip控件是一个扩展器控件,它将扩展表单上其他控件的属性集。在背后,这是通过生成像Svetlozar回答中的代码来实现的。还有其他以相同方式工作的控件(如HelpProvider)。


1
你可以使用相同的工具提示来为不同的控件提供不同的文本吗? - Svish
@Svish:是的,这就是扩展控件的目的。 - Fredrik Mörk
它能跨用户控件和窗体使用吗?比如,如果您创建了一个具有标准属性值的静态ToolTip。或者这会被认为是不好的实践吗? - Svish
我从未尝试过它,也不太了解ToolTip的内部工作原理,但由于它会获取与文本相关联的控件的引用,所以我想它可能有效。只有一种方法可以找出来:试试看:o) - Fredrik Mörk
好的,我显然会尝试它。但是我不太擅长发现诸如内存泄漏之类的问题... 如果它会导致内存泄漏或类似的问题,我想知道,呵呵。 - Svish
正确答案。 - primo

8

C# 中的工具提示非常容易添加到几乎所有的UI控件中,您不需要为此添加任何MouseHover事件。

以下是添加工具提示的步骤:

  1. 在您的表单中添加一个ToolTip对象。一个对象就足够整个表单使用。 ToolTip toolTip = new ToolTip();

  2. 使用所需的文本将控件添加到工具提示中。

    toolTip.SetToolTip(Button1,"点击这里");


1
我是这样做的:只需将事件添加到任何控件中,设置控件的标记,并添加条件以处理适当控件/标记的工具提示。
private void Info_MouseHover(object sender, EventArgs e)
{
    Control senderObject = sender as Control;
    string hoveredControl = senderObject.Tag.ToString();

    // only instantiate a tooltip if the control's tag contains data
    if (hoveredControl != "")
    {
        ToolTip info = new ToolTip
        {
            AutomaticDelay = 500
        };

        string tooltipMessage = string.Empty;

        // add all conditionals here to modify message based on the tag 
        // of the hovered control
        if (hoveredControl == "save button")
        {
            tooltipMessage = "This button will save stuff.";
        }

        info.SetToolTip(senderObject, tooltipMessage);
    }
}

-3
只需订阅控件的ToolTipTextNeeded事件,并返回e.TooltipText,就简单多了。

7
我认为这不是标准WinForm控件事件。 - Dan7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接