【问题标题】:How can I add a hint or tooltip to a label in C# Winforms?如何向 C# Winforms 中的标签添加提示或工具提示?
【发布时间】:2012-04-04 06:53:21
【问题描述】:

似乎Label 没有HintToolTipHovertext 属性。那么当鼠标接近Label 时,显示提示、工具提示或悬停文本的首选方法是什么?

【问题讨论】:

标签: c# .net winforms label tooltip


【解决方案1】:

您必须先将ToolTip 控件添加到您的表单中。然后你可以设置它应该为其他控件显示的文本。

这是一个屏幕截图,显示了在添加名为 toolTip1ToolTip 控件后设计器:

【讨论】:

  • 哇,这似乎令人费解/违反直觉,呸。
  • @ClayShannon 在某种程度上我想是的。但设计有点优雅。有些控件永远不需要工具提示。这样,ToolTip 控件可以只注册自己的鼠标悬停事件,并根据引发的事件显示正确的文本。这一切都发生在后台。
  • 我同意。它还允许您对多个控件使用相同的工具提示控件。
  • @MarkAinsworth 因为一条评论说它好,一个评论说它坏,也许你说你同意它是好的还是同意它是坏的? .我想你是说你同意这很好。
  • 我认为这是一个糟糕的设计,因为它只支持静态工具提示。您将如何在运行时更新工具提示?
【解决方案2】:
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip( Label1, "Label for Label1");

【讨论】:

    【解决方案3】:
    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 调用旧工具提示上的终结器。
    【解决方案4】:

    只是另一种方式。

    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();
      

      另外,更改 Designer 代码中的私有变量引用:

      private ucLabel lblMyLabel;
      

      【讨论】:

      • 但不是每次用户使用表单可视化设计器更改某些内容时都会重新生成设计器代码吗?
      【解决方案6】:

      我做了一个帮手,让生活更轻松。

      public static class ControlUtilities1
      {
          public static Control AddToolTip(this Control control, string title, string text)
          {
              var toolTip = new ToolTip
              {
                  ToolTipIcon = ToolTipIcon.None,
                  IsBalloon = true,
                  ShowAlways = true,
                  ToolTipTitle = title,
              };
              toolTip.SetToolTip(control, text);
              return control;
          }
      }
      

      在控件准备好后调用它:

              InitializeComponent();
              ...
              linkLabelChiValues.AddToolTip(title, text);
      

      这是一种保持工具提示样式一致的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        相关资源
        最近更新 更多