¿Cómo puedo mostrar información sobre herramientas sobre un botón con Windows Forms ?
¿Cómo puedo mostrar información sobre herramientas sobre un botón con Windows Forms ?
Respuestas:
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.
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.
Usando el diseñador de formularios:
También puede configurar la información sobre herramientas mediante programación mediante la siguiente llamada:
this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
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");
}
new ToolTip().SetToolTip(this.Button1, "Hello");
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
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.
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);
}
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");
}
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");
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);
}