2012-03-19 11 views
69

Wygląda na to, że Label nie ma właściwości Hint lub ToolTip lub Hovertext. Jaki jest więc preferowany sposób wyświetlania podpowiedzi, podpowiedzi lub tekstu po najechaniu, gdy mysz podchodzi do myszy Label?Jak dodać podpowiedź lub etykietkę narzędzia do etykiety w C# Winforms?

+0

Możliwe duplikat [Wyświetlanie etykietkę na najechania myszą tekstu] (http://stackoverflow.com/questions/873175/displaying-tooltip-on-mouse-hover-of-a-text) –

Odpowiedz

89

Najpierw należy dodać formant ToolTip do formularza. Następnie możesz ustawić tekst, który powinien wyświetlić dla innych elementów sterujących.

Oto zrzut ekranu pokazujący projektanta po dodaniu ToolTip kontroli, który jest nazwany toolTip1:

enter image description here

+13

wow, to wydaje się zawiłe/sprzeczne z intuicją, Yuck. –

+0

@ClayShannon W pewnym sensie to jest. Ale projekt jest nieco elegancki. Niektóre elementy sterujące nigdy nie będą żądały wskazówek narzędzi. W ten sposób kontrolka 'ToolTip' może po prostu rejestrować się pod kątem zdarzeń myszy i wyświetlać odpowiedni tekst w zależności od podniesionego zdarzenia. Wszystko dzieje się w tle. – Yuck

+1

Zgadzam się. Pozwala także używać tej samej kontrolki podpowiedzi dla wielu kontrolek. –

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

Bardzo przydatne dla dynamicznych podpowiedzi, dziękuję! – Pisu

+0

Nie zapomnij wyrzucić etykiety narzędzi, jeśli zrobisz to bardzo często przy każdym przesuwaniu myszy, wycieknie uchwytów, dopóki GC nie wywoła finalizatora na starszych etykietach narzędzi. – drake7707

11

tylko inny sposób to zrobić.

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

Podoba mi się ten pomysł; ale masz na myśli "lbl", a nie "etykietę" w drugiej linii, prawda? –

+1

Tak, dziękuję. Dobrze, sir. – ac0de

4

Wystarczy udostępnić mój pomysł ...

stworzyłem niestandardowej klasy dziedziczą z klasy Label. Dodałem prywatną zmienną przypisaną jako klasa Tooltip i właściwość publiczną TooltipText. Następnie nadano mu metodę delegowania MouseEnter. Jest to prosty sposób na pracę z wieloma kontrolkami Label i nie musisz się martwić o przypisanie kontroli Tooltip dla każdego kontrolera Label.

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

W postaci lub metody InitializeComponent kontrolowania ustawień (kod Designer), przypisanie swoją kontrolę Label do niestandardowej klasy:

this.lblMyLabel = new ucLabel(); 

Również zmienić prywatną zmienną odniesienie w kodzie autora:

private ucLabel lblMyLabel; 
+0

Ale czy kod Designer nie jest odnawiany za każdym razem, gdy użytkownik zmienia coś za pomocą projektanta formularzy? – ensisNoctis