¿Cómo puedo agregar una sugerencia o información sobre herramientas a una etiqueta en C # Winforms?

Respuestas:

112

ToolTipPrimero debe agregar un control a su formulario. Luego, puede configurar el texto que debe mostrarse para otros controles.

Aquí hay una captura de pantalla que muestra al diseñador después de agregar un ToolTipcontrol que se llama toolTip1:

ingrese la descripción de la imagen aquí

¡Qué asco!
fuente
19
Vaya, eso parece complicado / contradictorio, ¡qué asco!
B. Clay Shannon
@ClayShannon En cierto modo, supongo que lo es. Pero el diseño es algo elegante. Algunos controles nunca querrán información sobre herramientas. De esta manera, el ToolTipcontrol puede simplemente registrarse para los eventos del mouse sobre y mostrar el texto apropiado dependiendo del evento generado. Todo esto sucede en segundo plano.
Yuck
1
Estoy de acuerdo. También le permite utilizar el mismo control de información sobre herramientas para varios controles.
Mark Ainsworth
@MarkAinsworth ya que un comentario dice que es bueno y otro que es malo, ¿tal vez usted dice si está de acuerdo en que es bueno o está de acuerdo en que es malo? . Supongo que estás diciendo que estás de acuerdo en que es bueno.
barlop
Creo que este es un mal diseño porque solo admite una descripción emergente estática. ¿Cómo actualizaría la información sobre herramientas en tiempo de ejecución?
Arvo Bowen
90
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.");
SeeSharp
fuente
No olvide deshacerse de la información sobre herramientas si hace esto mucho en cada cursor, perderá identificadores hasta que el GC llame al finalizador en las descripciones más antiguas.
drake7707
21
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip( Label1, "Label for Label1");
scibuff
fuente
15

solo otra forma de hacerlo.

Label lbl = new Label();
new ToolTip().SetToolTip(lbl, "tooltip text here");
ac0de
fuente
5

Solo para compartir mi idea ...

Creé una clase personalizada para heredar la clase Label. Agregué una variable privada asignada como una clase de información sobre herramientas y una propiedad pública, TooltipText. Luego, le dio un método delegado MouseEnter. Esta es una manera fácil de trabajar con múltiples controles de etiqueta y no tener que preocuparse por asignar su control de información sobre herramientas para cada control de etiqueta.

    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 el método InitializeComponent del formulario o del control de usuario (el código del diseñador), reasigne su control Label a la clase personalizada:

this.lblMyLabel = new ucLabel();

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

private ucLabel lblMyLabel;
cChacón
fuente
Pero, ¿no se regenera el código del diseñador cada vez que el usuario cambia algo con el diseñador visual de formularios?
Robert Synoradzki