Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向控件添加工具提示?_C#_Winforms_Tooltip - Fatal编程技术网

C# 如何向控件添加工具提示?

C# 如何向控件添加工具提示?,c#,winforms,tooltip,C#,Winforms,Tooltip,我想在鼠标悬停在控件上时显示工具提示 如何在代码中以及在设计器中创建工具提示?这篇文章是关于如何使用代码创建工具提示的 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 dela

我想在鼠标悬停在控件上时显示
工具提示

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

这篇文章是关于如何使用代码创建工具提示的

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

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

  • 将工具提示组件添加到表单中
  • 选择要为其提供工具提示的控件之一
  • 打开属性网格(F4),在列表中可以找到名为“ToolTip on toolTip1”(或类似内容)的属性。在该属性上设置所需的工具提示文本
  • 对其他控件重复2-3
  • 完成了

  • 这里的技巧是工具提示控件是一个扩展控件,这意味着它将扩展窗体上其他控件的属性集。在幕后,这是通过生成类似Svetlozar回答中的代码来实现的。还有其他控件以同样的方式工作(例如帮助提供者)。

    只需订阅控件的ToolTipTextRequired事件,并返回e.TooltipText,这要简单得多。

    C中的ToolTip很容易添加到几乎所有UI控件中。您不需要为此添加任何鼠标悬停事件

    这是如何做到的-

  • 将工具提示对象添加到表单中。一个对象对于整个表单就足够了。
    ToolTip ToolTip=新工具提示()

  • 使用所需文本将控件添加到工具提示中

    toolTip.SetToolTip(按钮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);
        }
    }
    

    因此,您可以对具有不同文本的许多控件使用相同的工具提示?@Svish:是的,这是extender控件的用途。它也可以用于跨用户控件和表单吗?就像使用标准特性值创建静态工具提示一样。或者这会被认为是不好的做法吗?我从未尝试过,我也不太了解工具提示的内部工作原理,但由于它得到了一个与文本相关的控件的引用,我想它可能会工作。只有一种方法可以找到答案;试试看:哦,我当然会试试看。但我并不特别擅长发现诸如内存泄漏之类的东西。。。如果它会导致内存泄漏或诸如此类的事情,我很想知道,呵呵。所以我想,如果
    toolTip1
    变量超出范围,那也没关系吧?对于你所有的表单,一个静态
    ToolTip
    怎么样?一旦它变为未引用,它就会被释放,而不是,由于按钮和复选框仍然会引用它,因此它们引用它是因为“SetToolTip”将事件处理程序添加到按钮和复选框的事件中。我认为将工具提示放入静态变量是个坏主意。如果表单被关闭并再次打开,该怎么办?SetTooltip还会工作吗?如果是这样的话,关闭表单的处理程序会留在内存中还是被正确删除?我甚至不会花一分钟来测试它。使用一个成员变量来代替-这是防弹的!我不认为这是标准的WinForm控件事件。请确保在执行此操作时(如凌晨2点)使用工具提示控件,而不是ToolStrip控件。根据此答案,仅向WinForm添加一个工具提示即可为窗体中的所有控件提供其自己的工具提示。其简单性非常强大,只需确保将其放在右边的控件上,而不是旁边的控件上(如凌晨2点)。双击工具提示控件可将其添加到表单中,该表单可能与相关的或更旧的控件重复(通常适用于.NET):