如何将工具提示添加到控件?


154

ToolTip当鼠标悬停在鼠标上时,我有一些控件想要显示。我怎样才能做到这一点?我想知道如何在代码中以及在设计器中正确地做到这一点(ToolTip工具箱中有一个组件,但我不太了解。)

如果这是重复的,我不会感到惊讶,但是我只能找到在更高级的特定场景下遇到的问题。我想了解基本知识。



相关,和老年人仍然(适用于.NET一般):stackoverflow.com/questions/168550/...
克里斯托弗·凯尔霍顿

Answers:


208

是您的代码文章

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

3
所以我想toolTip1变量是否超出范围并不重要?
Svish

1
那么ToolTip对于所有形式的一个静态呢?
Svish

7
一旦被取消引用,它将被释放,而实际上不会,因为按钮和复选框仍将引用它
Rowland Shaw,2009年

2
他们引用它是因为“ SetToolTip”将EventHandlers添加到按钮和复选框的事件
Eduardo Wada 2014年

3
我认为将工具提示放入静态变量是个坏主意。如果表单关闭并再次打开怎么办?SetTooltip是否可以再次使用?如果是这样,关闭表格的处理程序是否会保留在内存中或正确删除?我什至不会花一分钟来测试它。改用成员variabe-多数民众赞成在证明!
Elmue 2014年

138

将工具提示控件从工具箱拖到窗体上。除了名称之外,您实际上不需要为其提供任何其他属性。然后,在您希望使用工具提示的控件的属性中,寻找一个具有刚刚添加的工具提示控件名称的新属性。默认情况下,当光标悬停在控件上时,它将为您提供工具提示。


54
确保在执行此操作时(例如凌晨2点),您使用的是ToolTip控件而不是ToolStrip控件。
Adrian K

2
有了这个答案,只需在Winform中添加一个工具提示,就可以为窗体中的所有控件提供自己的工具提示。
SAm

简单易用,只需将其放在正确的控件上即可,而不要放在旁边的控件上(例如凌晨2点)。
Michael Stimson

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

这里的技巧是ToolTip控件是一个Extender控件,这意味着它将扩展表单上其他控件的属性集。在幕后,这是通过生成Svetlozar的答案中的代码来实现的。还有其他以相同方式工作的控件(例如HelpProvider)。


1
因此,您可以将同一工具提示用于带有不同文本的许多控件吗?
Svish

@Svish:是的,这就是扩展程序控件的目的。
2009年

它也可以跨用户控件和表单使用吗?就像您使用标准属性值创建静态ToolTip一样。还是将其视为不良做法?
Svish

我从未尝试过,而且我不太了解ToolTip的内部工作原理,但是由于它获得了与文本相关的控件的引用,所以我想它可能会起作用。只有一种找出答案的方法;尝试一下:o)
FredrikMörk09年

好吧,我显然会尝试一下。但是我并不是特别擅长发现诸如内存泄漏之类的问题……如果这会导致内存泄漏或我想知道的类似事情,呵呵。
Svish

8

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

这是怎么做的

  1. 将一个工具提示对象添加到您的窗体。一个对象足以容纳整个表单。 ToolTip toolTip = new ToolTip();

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

    toolTip.SetToolTip(Button1,"Click here");


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,就简单得多。


6
我认为这不是标准的WinForm控件事件。
2011年
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.