2012-03-19 12 views
69

Sembra che lo Label non abbia Hint o ToolTip o Hovertext proprietà. Quindi qual è il metodo preferito per mostrare un suggerimento, un suggerimento o un testo al passaggio del mouse quando si avvicina il Label al mouse?Come posso aggiungere un suggerimento o suggerimento a un'etichetta in C# Winforms?

+0

Eventuali duplicati di [Visualizzazione tooltip al passaggio del mouse presso un testo] (http://stackoverflow.com/questions/873175/displaying-tooltip-on-mouse-hover-of-a-text) –

risposta

89

Devi prima aggiungere un controllo ToolTip al modulo. Quindi puoi impostare il testo che dovrebbe essere visualizzato per gli altri controlli.

Ecco uno screenshot che mostra il designer dopo l'aggiunta di un controllo ToolTip che prende il nome toolTip1:

enter image description here

+13

Wow, sembra contorto/controintuitivo, Yuck. –

+0

@ClayShannon In un certo senso, suppongo che lo sia. Ma il design è in qualche modo elegante. Alcuni controlli non vorrebbero mai suggerimenti sugli strumenti. In questo modo, il controllo 'ToolTip' può registrarsi per gli eventi mouse over e visualizzare il testo corretto in base all'evento generato. Questo succede tutto in background. – Yuck

+1

Sono d'accordo. Permette anche di usare lo stesso controllo tooltip per più controlli. –

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

Molto utile per suggerimenti dinamici, grazie! – Pisu

+0

Non dimenticarti di mettere a disposizione il tooltip se lo fai molto per ogni passaggio del mouse, perderai maniglie fino a quando il GC non chiama il finalizzatore sui tooltips più vecchi. – drake7707

11

solo un altro modo per farlo.

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

Mi piace questa idea; ma intendi "lbl" non "etichetta" sulla seconda riga, giusto? –

+1

Sì, grazie. Buon occhio, signore. – ac0de

4

solo per condividere la mia idea ...

ho creato una classe personalizzata per ereditare la classe Label. Ho aggiunto una variabile privata assegnata come classe Tooltip e una proprietà pubblica, TooltipText. Quindi, gli ha dato un metodo delegato MouseEnter. Questo è un modo semplice per lavorare con più controlli Label e non doversi preoccupare di assegnare il controllo Tooltip per ogni controllo 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); 
      } 
     } 
    } 

Nella forma o metodo InitializeComponent di controllo dell'utente (il codice Designer), riassegnare il vostro controllo Label alla classe personalizzata:

this.lblMyLabel = new ucLabel(); 

Inoltre, modificare il riferimento variabile privata nel codice Designer:

private ucLabel lblMyLabel; 
+0

Ma il codice Designer non viene rigenerato ogni volta che l'utente cambia qualcosa utilizzando Form visual designer? – ensisNoctis

Problemi correlati