Mostrar información sobre herramientas sobre un botón con Windows Forms

Respuestas:

222

La información sobre herramientas es en realidad un control WinForms que maneja la visualización de información sobre herramientas para múltiples elementos en un solo formulario.

Digamos que su botón se llama MyButton.

  1. Agregue un control de información sobre herramientas (en Controles comunes en el cuadro de herramientas de formularios Windows Forms) a su formulario.
  2. Dale un nombre, di MyToolTip
  3. Establezca la propiedad "Información sobre herramientas en MyToolTip" de MyButton (en Varios en la cuadrícula de propiedades del botón) en el texto que debería aparecer cuando se pasa el cursor sobre él.

La información sobre herramientas aparecerá automáticamente cuando el cursor se desplace sobre el botón, pero si necesita mostrarlo programáticamente, llame

MyToolTip.Show("Tooltip text goes here", MyButton)

en su código para mostrar la información sobre herramientas, y MyToolTip.Hide (MyButton) para que desaparezca nuevamente.

Dylan Beattie
fuente
bueno, pero una pregunta: si tengo más de un botón en un formulario, ¿necesito más información sobre herramientas o puedo configurar varias descripciones y botones para la misma información sobre herramientas?
ghiboz
8
Su formulario solo necesita un control ToolTip: cada botón puede tener un texto de ayuda diferente (es por eso que "Tooltip on MyToolTip" es una propiedad del control asociado, no del control ToolTip en sí)
Dylan Beattie
2
En el caso más simple, agregar la información sobre herramientas al formulario es lo mejor que se puede hacer. Problema: en el momento del diseño de un Control personalizado no tiene referencia al Formulario principal. Solución: cree un objeto de información sobre herramientas en el Control. No piense en el objeto de información sobre herramientas como necesariamente adjunto al formulario.
Stéphane Gourichon
93

Usando el diseñador de formularios:

  • Arrastre el control de información sobre herramientas desde el cuadro de herramientas hasta el formulario.
  • Seleccione las propiedades del control en el que desea que aparezca la información sobre herramientas.
  • Busque la propiedad 'ToolTip on toolTip1' (el nombre puede no ser toolTip1 si cambió su nombre predeterminado).
  • Establezca el texto de la propiedad en el texto de información sobre herramientas que desea mostrar.

También puede configurar la información sobre herramientas mediante programación mediante la siguiente llamada:

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
jmatthias
fuente
45

Puede usar la clase ToolTip:

Crear una información sobre herramientas para un control

Ejemplo:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}
DaveK
fuente
1
Esta es la solución perfecta, ya que se integra directamente con el código VS generado automáticamente. Gracias :)
anon58192932
@DaveK Gracias. Es mejor así porque puedo definir todas las sugerencias sobre herramientas en un solo lugar
fedeteka
Gracias. La mejor y más directa respuesta a esta pregunta.
Najeeb
Aún más corto:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf
6

Para la información sobre herramientas predeterminada, esto se puede utilizar:

System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");

Una información sobre herramientas personalizada también se puede utilizar en caso de que se requiera formatear el mensaje de información sobre herramientas. Esto se puede crear formateando el formulario de forma personalizada y usarlo como diálogo de información sobre herramientas en el evento de desplazamiento del mouse del control. Por favor, consulte el siguiente enlace para más detalles:

http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html

nvivekgoyal
fuente
5

Texto de almacenamiento lento y compacto en la propiedad Etiqueta

Si es un poco vago y no usa la propiedad Etiqueta de los controles para nada más, puede usarla para almacenar el texto de información sobre herramientas y asignar MouseHover eventos a todos esos controles de una sola vez:

    private System.Windows.Forms.ToolTip ToolTip1;
    private void PrepareTooltips()
    {
        ToolTip1 = new System.Windows.Forms.ToolTip();
        foreach(Control ctrl in this.Controls)
        {
            if (ctrl is Button && ctrl.Tag is string)
            {
                ctrl.MouseHover += new EventHandler(delegate(Object o, EventArgs a)
                {
                    var btn = (Control)o;
                    ToolTip1.SetToolTip(btn, btn.Tag.ToString());
                });
            }
        }
    }

En este caso, a todos los botones que tienen una cadena en la propiedad Etiqueta se le asigna un evento MouseHover . Para mantenerlo compacto, el evento MouseHover se define en línea utilizando una expresión lambda. En el caso de que cualquier botón suspendido tenga su texto de etiqueta asignado a la información sobre herramientas y se muestre.

flodis
fuente
4

El marco .NET proporciona una clase de información sobre herramientas. Agregue uno de esos a su formulario y luego, en el evento MouseHover, para cada elemento para el que desea obtener información sobre herramientas, haga algo como lo siguiente:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }
Timothy Carter
fuente
4
private void Form1_Load(object sender, System.EventArgs e)
{
    ToolTip toolTip1 = new ToolTip();
    toolTip1.AutoPopDelay = 5000;
    toolTip1.InitialDelay = 1000;
    toolTip1.ReshowDelay = 500;
    toolTip1.ShowAlways = true;
    toolTip1.SetToolTip(this.button1, "My button1");
    toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}
akn
fuente
44
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código.
secelite
0

Basado en la respuesta de DaveK , creé una extensión de control:

public static void SetToolTip(this Control control, string txt)
{
    new ToolTip().SetToolTip(control, txt);
}

Luego puede configurar la información sobre herramientas para cualquier control con una sola línea:

this.MyButton.SetToolTip("Hello world");
The_Black_Smurf
fuente
-4

Claro, solo maneja el evento mousehover y dile que muestre información sobre herramientas. t es una información sobre herramientas definida en los globales o en el constructor usando:

ToolTip t = new ToolTip();

entonces el controlador de eventos:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}
Freír
fuente
2
Creo que te rechazaron porque esa no es la forma de usar los controles de información sobre herramientas en formularios Windows Forms. Solo necesita uno de esos controles en el formulario y muestra los consejos para todos los controles. Ver código en las otras respuestas.
Julian Melville
1
Supongo que la explicación no coincide con el código, donde en la explicación que dije lo muestra y en el código también lo inicialicé. Culpa mía. : P
Fry
2
@ julianz En realidad, esto funciona bien para tener información sobre herramientas especializadas que pueden ser dinámicas si lo deseas dependiendo del estado (menos, por supuesto, la creación, perdóname, solo estaba tratando de encajar todo en un bloque). En cuanto a otras respuestas en un vena similar ... yshuditelu y Dylan Beattie eran similares aunque sin la instanciación.
Fry