¿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í


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.");

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

15

solo otra forma de hacerlo.

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

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;

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.