Exibir uma dica de ferramenta sobre um botão usando o Windows Forms

Respostas:

222

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.

  1. Adicione um controle de dica de ferramenta (em controles comuns na caixa de ferramentas do Windows Forms) ao seu formulário.
  2. Dê um nome a ele - diga MyToolTip
  3. Defina a propriedade "Dica de ferramenta no MyToolTip" do MyButton (em Misc na grade de propriedades do botão) como o texto que deve aparecer quando você passar o mouse sobre ele.

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.

Dylan Beattie
fonte
legal, mas uma pergunta: se eu tiver mais de um botão em um formulário, preciso de mais dicas ou posso definir várias descrições e botões para a mesma dica?
precisa saber é o seguinte
8
Sua forma só precisa de um único controle ToolTip - cada botão pode ter diferentes texto de ajuda (é por isso que o "Dica em MyToolTip" é uma propriedade do controle associado, não do próprio controle dica de ferramenta)
Dylan Beattie
2
No caso mais simples, adicionar a dica de ferramenta ao formulário é a melhor coisa a fazer. Problema: no tempo de design de um Controle personalizado, você não faz referência ao Formulário pai. Solução: crie um objeto de dica de ferramenta no controle. Não pense no objeto Dica de ferramenta como necessariamente anexado ao formulário.
Stéphane Gourichon
93

Usando o designer de formulários:

  • Arraste o controle ToolTip da caixa de ferramentas para o formulário.
  • Selecione as propriedades do controle em que você deseja que a dica de ferramenta apareça.
  • Localize a propriedade 'ToolTip on toolTip1' (o nome pode não ser toolTip1 se você alterou o nome padrão).
  • Defina o texto da propriedade como o texto da dica de ferramenta que você deseja exibir.

Você também pode definir a dica de ferramenta programaticamente usando a seguinte chamada:

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

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");
}
DaveK
fonte
1
Esta é a solução perfeita, pois se integra diretamente ao código VS gerado automaticamente. Obrigado :)
anon58192932
@DaveK Obrigado. É melhor assim, porque eu posso definir todas as dicas de ferramentas em um só lugar
fedeteka
Obrigado. A melhor e mais direta resposta a esta pergunta.
Najeeb
Ainda mais curto:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf
6

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

nvivekgoyal
fonte
5

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.

flodis
fonte
4

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);
    }
Timothy Carter
fonte
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
fonte
4
Embora esse trecho de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código.
secelite
0

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");
The_Black_Smurf
fonte
-4

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);
}
Fritar
fonte
2
Acho que você foi rejeitado porque não é assim que os controles de dica de ferramenta são usados ​​no Windows Forms. Você só precisa de um desses controles no formulário e mostra as dicas para todos os controles. Veja o código nas outras respostas.
Julian Melville
1
Eu acho que a explicação não corresponde ao código, onde na explicação eu disse para exibi-lo e no código eu o inicializei também. Foi mal. : P
Fry
2
@ julianz Na verdade, isso funciona bem por ter dicas de ferramentas especializadas que podem ser dinâmicas se você quiser, dependendo do estado (menos a criação - é claro, perdoe-me, eu estava apenas tentando encaixar tudo em um único bloco.) veia semelhante ... yshuditelu e Dylan Beattie eram semelhantes, embora sem a instanciação.
Fry