如何在C#Winforms中向标签添加提示或工具提示?


Answers:


112

您必须ToolTip先向表单添加控件。然后,您可以设置其他控件应显示的文本。

这是显示设计师添加ToolTip名为的控件后的屏幕截图toolTip1

在此处输入图片说明


19
哇,这似乎很令人费解/违反直觉。
B. Clay Shannon 2012年

@ClayShannon在某种程度上,我认为是。但是设计有点优雅。一些控件永远不需要工具提示。这样,ToolTip控件就可以为其自身注册鼠标悬停事件,并根据引发的事件显示适当的文本。这一切都在后台发生。
Yuck 2012年

1
我同意。它还允许您将相同的工具提示控件用于多个控件。
Mark Ainsworth

@MarkAinsworth,因为有一条评论说这是好事,而另一条则说是坏事,也许您要说是同意还是不好?。我想你是说你同意这很好。
barlop

我认为这是一个糟糕的设计,因为它仅支持静态工具提示。您如何在运行时更新工具提示?
Arvo Bowen

90
yourToolTip = new ToolTip();
//The below are optional, of course,

yourToolTip.ToolTipIcon = ToolTipIcon.Info;
yourToolTip.IsBalloon = true;
yourToolTip.ShowAlways = true;

yourToolTip.SetToolTip(lblYourLabel,"Oooh, you put your mouse over me.");

如果您在每次鼠标悬停时都执行很多操作,请不要忘记布置工具提示,否则将泄漏句柄,直到GC在较旧的工具提示上调用终结器为止。
drake7707 2013年

21
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip( Label1, "Label for Label1");

15

只是另一种方式。

Label lbl = new Label();
new ToolTip().SetToolTip(lbl, "tooltip text here");

5

只是分享我的想法...

我创建了一个自定义类来继承Label类。我添加了一个分配为Tooltip类的私有变量和一个公共属性TooltipText。然后,给它一个MouseEnter委托方法。这是使用多个Label控件的简便方法,而不必担心为每个Label控件分配Tooltip控件。

    public partial class ucLabel : Label
    {
        private ToolTip _tt = new ToolTip();

        public string TooltipText { get; set; }

        public ucLabel() : base() {
            _tt.AutoPopDelay = 1500;
            _tt.InitialDelay = 400;
//            _tt.IsBalloon = true;
            _tt.UseAnimation = true;
            _tt.UseFading = true;
            _tt.Active = true;
            this.MouseEnter += new EventHandler(this.ucLabel_MouseEnter);
        }

        private void ucLabel_MouseEnter(object sender, EventArgs ea)
        {
            if (!string.IsNullOrEmpty(this.TooltipText))
            {
                _tt.SetToolTip(this, this.TooltipText);
                _tt.Show(this.TooltipText, this.Parent);
            }
        }
    }

在窗体或用户控件的InitializeComponent方法(设计器代码)中,将Label控件重新分配给自定义类:

this.lblMyLabel = new ucLabel();

另外,在设计器代码中更改私有变量引用:

private ucLabel lblMyLabel;

但是,用户每次使用Form Visual Designer进行更改时,Designer代码是否不会重新生成?
罗伯特·西诺拉兹基
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.