Notify Icon no .NET 2.0 com dica estilo balão

 

Em versões anteriores do .NET, se quiséssemos ter um notify icon na bandeja, teríamos que usar a classe Notify Icon e fazer um pequeno trabalho extra. Agora, no .NET 2.0, há um controle Notify Icon que poderemos colocar no formulário Windows. Foi acrescentada as propriedades de dicas balão.

Fundamentos

Escrevi recentemente um artigo a respeito do uso do Windows Messaging para fazer com que uma instância de uma aplicação existente, apareça mesmo quando foi minimizada ou foi oculta, como um ícone da bandeja. Estava na ocasião fazendo uma pequena pesquisa para verificar as diferenças em relação ao .NET 2.0, e foi quando vi o controle Notify Icon e decidi experimentá-lo. Atualmente, não tenho nenhuma aplicação em produção que use este código, mas acho que algum dia provavelmente terei.

O Problema

Podemos nos perguntar: por que usar o Notify Icon? A principal razão é que poderemos ver a aplicação na bandeja. No exemplo deste artigo, quando a aplicação for minimizada, ocultaremos o formulário da barra de tarefas.

 

Nota: existe uma nova propriedade no formulário que podemos usar se não quisermos que o mesmo apareça na barra de tarefas, a qual é chamada de “ShowInTaskBar”. Se configurarmos falso para esta propriedade, a aplicação não aparecerá na barra de tarefas.

 

Esta aplicação oculta o formulário da barra de tarefas quando este for minimizado e o exibe quando não estiver minimizado. Um problema com o uso da bandeja é que os usuários podem não saber para onde a aplicação foi. Especialmente, quando ocultamos o formulário da barra de tarefas como fizemos nesta aplicação. Portanto, a solução para contornar este problema será usarmos dicas balão. É uma boa funcionalidade que permite exibir uma pequena mensagem balão sobre o ícone da bandeja quando certas coisas acontecerem.

A Solução

Esta aplicação exibe esta mensagem de dica balão quando o formulário for minimizado.

 

Figura 1.

A seguir, a aplicação oculta a mensagem de dica balão quando for clicado o X no canto superior direito, semelhantemente ao que o Windows Messenger faz.

 

Nota: não sou um grande fã de sobrescrever a funcionalidade padrão de fechar a aplicação ao se clicar o x do canto superior direito, mas o farei nesta aplicação a título de exemplo.

 

 

Figura 2.

O Código

A seguir, o código que verifica o estado atual do Windows, para sabermos se deveremos ocultar ou exibir o formulário na barra de tarefas:

 

private void Form1_Move(object sender, EventArgs e)

{

  //Este codigo faz com que o formulario so seja mostrado na bandeja.

  //REPARE que atualmente existe uma propriedade do formulario que faz com que

  // a aplicação nunca apareça na barra de tarefas.

  if (this == null)

  { //Isto acontece no on create.

    return;

  }

  //Ocultar o formulario quando for minimizado para não aparecer na barra de tarefas.

  if (this.WindowState == FormWindowState.Minimized)

  {

    this.Hide();

    notifyIcon1.ShowBalloonTip(3000, "Test App",

            "The App has been moved to the tray.",

            ToolTipIcon.Info);

  }

  else

  {

    this.Show();

  }

 

}

 

A seguir, o código que verifica se o formulário está sendo fechado, para decidirmos se fecharemos a aplicação ou apenas a enviaremos para a bandeja:

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

  //Existem varias maneiras de fechar uma aplicação

  //Estamos tentando achar o clique no X no canto superior direito

  //Permitiremos o fechamento da aplicacao somente se estiver minimizada.

  if (this.WindowState != FormWindowState.Minimized)

  {

    //nao fecharemos a aplicacao...

    e.Cancel = true;

    //minimizar a aplicacao e exibeir uma mensagem para o usuario

    //para alerta-lo de que a mesma nao foi fechada, mas enviada para a bandeja.

    this.WindowState = FormWindowState.Minimized;

    //Exibir a mensagem.

    notifyIcon1.ShowBalloonTip(3000, "Test App",

         "You have not closed this appliation."+

         (Char)(13)+"It has be moved to the tray."+

         (Char)(13)+"Right click the Icon to exit.",

         ToolTipIcon.Info);

  }

}

 

A seguir, o código que será executado quando fizermos um duplo clique sobre o ícone da bandeja para retorná-lo ao estado de Windows normal:

 

private void notifyIcon1_DoubleClick(object sender, EventArgs e)

{

  if (this.WindowState == FormWindowState.Minimized)

  {

    this.Show();

    this.WindowState = FormWindowState.Normal;

  }

 

  // Ativar o formulario.

  this.Activate();

  this.Focus();

}

 

Conclusão

Espero que este artigo mostre como usar o novo controle Notify Icon em conjunto com as dicas balão. Espero que essa informação tenha sido útil.