Adicionando um menu ao ícone na bandeja

12 F Y

Depois de mostrar como colocar um ícone na bandeja para a sua aplicação e a mostrar o balão de notificação a partir deste ícone, irei neste post descrever o passo-a-passo para atribuir um menu para este ícone de sua aplicação .NET. Este menu será acessado através do clique com o botão direito do mouse sobre o ícone.

ContextMenuStrip na toolbar do Visual Studio 2008

O primeiro passo é adicionar um controle ContextMenuStrip ao seu formulário. Como ilustrado na imagem acima, o controle se encontra na aba Menus & Toolbars da Toolbox do VS2008.

Clique e arraste para dentro do seu form, e a representação do seu controle ficará embaixo, fora do form, assim como o NotifyIcon fica quando é arrastado. Quando você clicar no controle, irá aparecer um menu no formulário. Não se preocupe, ele está ali apenas para facilitar seu trabalho durante a edição do menu, e não aparecerá naquele lugar durante a execução da sua aplicação.

Edit Items

Configure o menu de acordo com seu desejo, mudando sua aparência e adicionando itens. Tudo isso pode ser feito através da tela Edit Items, disponível ao clicar na imagem de “play” que surge ao clicar no componente.

Quando acabar, é só adicionar os eventos de clique para cada item do menu. Isto não pode ser feito através da tela Edit Items. Para acessar os eventos, deixe a janela de propriedades do Visual Studio visível e clique no componente. Quando o menu aparecer no form, clique no item desejado. Depois, clique no botão com um “raio” na janela de propriedades para exibir os eventos, e escolha qual evento você deseja adicionar algum comportamento. Provavelmente você irá escrever código para o evento Click.

Depois de atribuir o que deve acontecer quando cada item do menu for clicado, é hora de atribuir este menu ao seu ícone da bandeja. Para isso, clique no componente do ícone, e na janela de propriedades altere o valor da propriedade ContextMenuStrip para o menu que você acabou de criar. Isto irá associar este menu ao seu ícone, e automaticamente quando o ícone for clicado, seu menu irá ser mostrado para o usuário. No meu projeto de exemplo, o resultado é o seguinte:

Ícone na bandeja com menu

Pronto, é só isso! Seu menu está funcionando. Se forem bem escolhidos, os itens deste menu irão refletir as atividades mais comuns e que não exigem que toda a interface seja mostrada. Através deste menu, o usuário poderá então ser mais produtivo ao utilizar a aplicação.

Apesar de meu exemple ter sido feito em C#, o passo-a-passo deste artigo (e dos anteriores também) pode ser utilizado tranquilamente para quem prefere usar VB.NET.

Clique aqui para baixar um projeto com o código final deste exemplo. Este projeto tem o mínimo de código necessário para colocar o ícone na bandeja, exibir balões de notificação e atribuir um menu para o ícone.


Exibindo balões em ícones da bandeja

11 F Y

No post anterior, expliquei como colocar um ícone na bandeja para sua aplicação .NET. Mostrei apenas o básico, mas que já é suficiente para alguns usos. Outras características possíveis de se adicionar nestes botões, como os balões de notificação e os menus, trazem um poder muito grande ao seu pequeno ícone.

Configurando e exibindo balões de notificação para ícones na bandeja

Estes são aqueles balões que gerenciadores de download mostram quando um arquivo acaba de ser baixado, ou que o Windows mostra quando há algum problema de segurança, tipo anti-vírus desatualizado ou firewall desabilitado.

Balão de Notificação

Usá-los é bem simples. Você pode configurar um balão padrão, para mostrar quando o mouse é deixado em cima do ícone por exemplo, ou exibir um balão para avisar de algum evento ocorrido na execução de sua aplicação como o término de um download, no caso dos gerenciadores citado anteriormente.

Propriedades de NotifyIcon para o Balão

Para configurar um balão padrão, basta atribuir valores para as propriedades BalloonTipIcon, BalloonTipText e BaloonTipTitle de NotifyIcon, na janela de propriedades. Para mostrar o balão, chame a seguinte linha de código:

notifyIcon1.ShowBalloonTip(10000);

Onde, 10000 é um timeout, um tempo em milissegundos até o balão desaparecer. De acordo com algumas fontes que li, mesmo que você bote 3000ms por exemplo, o sistema operacional vai deixar por no mínimo entre 10 e 30 segundos. No teste que fiz com o XP, o mínimo foram 10s.

Para fazer o balão aparecer quando o mouse passa por cima do ícone*, basta chamar a linha de código acima no evento de MouseMove do seu NotifyIcon. O resultado desta chamada para as propriedades com os valores da imagem acima é o seguinte:

Balão com dados setados na janela de propriedades

Para mostrar um balão com outro texto, algo que necessite por exemplo de dados de tempo de execução, eu recomendo não alterar aquelas propriedades, mas sim chamar outra assinatura deste método. Esta outra assinatura recebe mais três parâmetros além do timeout:

notifyIcon1.ShowBalloonTip(timeout, tituloDoBalao, textoDoBalao, tipoDoBalao);

O título e o texto são auto-explicativos. O tipo do balão é um valor do tipo ToolTipIcon que definirá a imagem que aparece dentro do balão. Este parâmetro pode assumir o valor ToolTipIcon.Info, que diz que o balão representa uma informação qualquer, ToolTipIcon.Error, no qual o balão representa um erro e ToolTipIcon.Warning, que irá conter um aviso para o usuário.

De cima para baixo: Info, Error e Warning

Para exibir o balão, basta em qualquer lugar de seu código, chamar a linha de código acima passando os parâmetros desejados. Você pode avisar sobre algum evento que aconteceu durante a execução da sua aplicação, e mesmo que o usuário esteja com a atenção em outra aplicação, poderá ver o aviso através do balão.

Fica para o próximo post o tutorial de como colocar um menu, acessível ao clicar com o botão direito no ícone da bandeja, onde o usuário poderá acessar algumas funcionalidades de sua aplicação.

* Não recomendo mostrar o balão ao passar o mouse por cima do ícone, pois dificulta clicar no ícone e a também complica a exibição do menu.