2012-03-19 152 views
69

看起來Label沒有HintToolTipHovertext屬性。那麼當鼠標靠近Label時,首選方法是顯示提示,工具提示還是懸停文本?如何將提示或工具提示添加到C#Winforms中的標籤?

+0

[顯示上的文本的鼠標懸停工具提示]的可能的複製(http://stackoverflow.com/questions/873175/displaying-tooltip-on-mouse-hover-of-a-text) – 2016-06-10 19:40:43

回答

89

您必須首先將ToolTip控件添加到您的表單中。然後,您可以設置它應該爲其他控件顯示的文本。

這裏是展示設計者的截圖添加ToolTip控制被命名爲toolTip1後:

enter image description here

+13

哇,這似乎令人費解/違反直覺,Yuck。 – 2012-03-19 19:29:43

+0

@ClayShannon以某種方式,我想它是。但設計有點優雅。一些控件永遠不會需要工具提示。這樣,'ToolTip'控件可以爲鼠標懸停事件註冊自己,並根據引發的事件顯示正確的文本。這一切都發生在後臺。 – Yuck 2012-03-19 19:37:21

+1

我同意。它還允許您爲多個控件使用相同的工具提示控件。 – 2015-07-12 18:55:58

18
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip(); 
ToolTip1.SetToolTip(Label1, "Label for Label1"); 
69
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."); 
+7

對於動態工具提示非常有用,謝謝! – Pisu 2013-04-16 08:11:34

+0

如果你在每次mouseover上做了很多事情,不要忘記處理工具提示,否則你會泄漏句柄,直到GC調用舊工具提示上的終結器。 – drake7707 2013-12-30 10:34:54

11

只是另一種方式來做到這一點。

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

我喜歡這個想法;但你的意思是「lbl」而不是「標籤」在第二行,對吧? – 2014-11-13 16:31:42

+1

是的,謝謝。好眼睛先生。 – ac0de 2014-11-14 18:59:53

4

只是分享我的想法......

我創建了一個自定義的類繼承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方法(設計器代碼),重新分配的標籤控制到自定義類:

this.lblMyLabel = new ucLabel(); 

此外,改變在設計代碼的私有變量參考:

private ucLabel lblMyLabel; 
+0

但是,每次用戶使用Form可視化設計器更改某些內容時,是不是重新生成Designer代碼? – ensisNoctis 2017-02-27 11:13:51

相關問題