Como posso exibir uma dica de ferramenta sobre um botão usando o Windows Forms ?
Como posso exibir uma dica de ferramenta sobre um botão usando o Windows Forms ?
Respostas:
A dica de ferramenta é realmente um controle WinForms que lida com a exibição de dicas de ferramentas para vários elementos em um único formulário.
Digamos que seu botão se chame MyButton.
A dica aparecerá automaticamente quando o cursor passar sobre o botão, mas se você precisar exibi-la programaticamente, chame
MyToolTip.Show("Tooltip text goes here", MyButton)
no seu código para mostrar a dica de ferramenta e MyToolTip.Hide (MyButton) para fazê-la desaparecer novamente.
Usando o designer de formulários:
Você também pode definir a dica de ferramenta programaticamente usando a seguinte chamada:
this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
Você pode usar a classe ToolTip:
Criando uma dica de ferramenta para um controle
Exemplo:
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 a dica de ferramenta padrão, isso pode ser usado -
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");
Uma dica de ferramenta personalizada também pode ser usada caso a formatação seja necessária para a mensagem da dica de ferramenta. Isso pode ser criado pela formatação personalizada do formulário e usá-lo como caixa de diálogo de dica de ferramenta no evento de foco do mouse do controle. Verifique o link a seguir para mais detalhes -
http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html
Texto de armazenamento lento e compacto na propriedade Tag
Se você estiver um pouco preguiçoso e não usar a propriedade Tag dos controles para mais nada, use-a para armazenar o texto da dica de ferramenta e atribuir manipuladores de eventos MouseHover a todos esses controles de uma só vez, como segue:
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());
});
}
}
}
Nesse caso, todos os botões com uma sequência na propriedade Tag recebem um evento MouseHover . Para mantê-lo compacto, o evento MouseHover é definido em linha usando uma expressão lambda. No caso de qualquer botão passar o mouse, o texto da tag será atribuído à dica de ferramenta e mostrado.
A estrutura .NET fornece uma classe ToolTip. Adicione um desses ao seu formulário e, em seguida, no evento MouseHover para cada item para o qual você deseja uma dica de ferramenta, faça algo como o seguinte:
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");
}
Com base na resposta de DaveK , criei uma extensão de controle:
public static void SetToolTip(this Control control, string txt)
{
new ToolTip().SetToolTip(control, txt);
}
Em seguida, você pode definir a dica de ferramenta para qualquer controle com uma única linha:
this.MyButton.SetToolTip("Hello world");
Claro, basta manipular o evento de passagem do mouse e pedir para exibir uma dica de ferramenta. t é uma dica de ferramenta definida nas globais ou no construtor usando:
ToolTip t = new ToolTip();
o manipulador de eventos:
private void control_MouseHover(object sender, EventArgs e)
{
t.Show("Text", (Control)sender);
}