2012-03-19 17 views
69

Parece que el Label no tiene Hint o ToolTip o Hovertext propiedad. Entonces, ¿cuál es el método preferido para mostrar una sugerencia, información sobre herramientas o texto emergente cuando se acerca el Label con el mouse?¿Cómo puedo agregar una sugerencia o información sobre herramientas a una etiqueta en C# Winforms?

+0

duplicado posible de [Viendo el cursor del mouse sobre herramientas de un texto] (http://stackoverflow.com/questions/873175/displaying-tooltip-on-mouse-hover-of-a-text) –

Respuesta

89

Primero tiene que agregar el control ToolTip al formulario. Luego puede establecer el texto que debería mostrar para otros controles.

Aquí hay una captura de pantalla que muestra el diseñador después de agregar un control ToolTip que lleva el nombre toolTip1:

enter image description here

+13

Wow, eso parece intrincado/contradictorio, Yuck. –

+0

@ClayShannon En cierto modo, supongo que sí. Pero el diseño es algo elegante. Algunos controles nunca querrán sugerencias de herramientas. De esta forma, el control 'ToolTip' puede registrarse solo para eventos de mouse over y mostrar el texto adecuado según el evento que se haya producido. Todo esto sucede en el fondo. – Yuck

+1

Estoy de acuerdo. También le permite usar el mismo control de información sobre herramientas para múltiples controles. –

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

Muy útil para información sobre herramientas dinámicas, ¡gracias! – Pisu

+0

No se olvide de desechar la información sobre herramientas si hace esto mucho en cada mouseover, tendrá fugas de controladores hasta que el GC llame al finalizador en la información de herramientas anterior. – drake7707

11

sólo otra manera de hacerlo.

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

Me gusta esta idea; pero quieres decir "lbl", no "etiqueta" en la segunda línea, ¿verdad? –

+1

Sí, gracias. Buen ojo, señor. – ac0de

4

sólo para compartir mi idea ...

he creado una clase personalizada para heredar la clase Label. Agregué una variable privada asignada como una clase Tooltip y una propiedad pública, TooltipText. Luego, le dio un método de delegado MouseEnter. Esta es una manera fácil de trabajar con múltiples controles Label y no tener que preocuparse por asignar su control Tooltip para cada control 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); 
      } 
     } 
    } 

En la forma o método InitializeComponent de control de usuario (el código Designer), reasignar su control Label a la clase personalizada:

this.lblMyLabel = new ucLabel(); 

Además, cambiar la referencia de variable privada en el código diseñador:

private ucLabel lblMyLabel; 
+0

¿Pero no se regenera el código del Diseñador cada vez que el usuario cambia algo utilizando el diseñador visual del formulario? – ensisNoctis

Cuestiones relacionadas