Alterar a visibilidade do formulário no NotifyIcon, clique e oculte-o em outro lugar
Tenho um aplicativo que está na bandeja do sistema. Quero torná-lo visível quando o usuário clicar nonotifyIcon
, se ainda não estiver visível. Se já estiver visível, deve estar oculto. Além disso, quando o usuário clica em qualquer outro lugar, exceto no formulário, o formulário deve ocultar (se estiver visível
Meu código é assim:
protected override void OnDeactivated(EventArgs e)
{
showForm(false);
}
public void showForm(bool show)
{
if(show)
{
Show();
Activate();
WindowState = FormWindowState.Normal;
}
else
{
Hide();
WindowState = FormWindowState.Minimized;
}
}
private void notifyIcon1_MouseClicked(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (WindowState != FormWindowState.Normal)
{
showForm(true);
}
}
}
O problema com o código é queonDeactivated
é chamado antes da chamada de clique, que oculta o formulário enotifyIcon1_MouseClicked
do que apenas mostrá-lo novamente. Se eu pudesse detectar se o foco foi perdido devido a um clique emnotifyIcon
ou em outro lugar, resolveria o problema.
Eu fiz minha pesquisa e encontrei um tópico semelhante, mas a solução acabou de detectar se a posição do mouse está sobre a bandeja quandoonDeactivated
é chamado: Alterne a janela C # clicando em NotifyIcon (ícone da barra de tarefas)
UPDATE: A solução que publiquei detecta apenas se o mouse do usuário está sobre os ícones da bandeja na barra de tarefas; portanto, se você clicar em qualquer outra bandeja, aonDeactivated
evento não será disparado. Desejo obter a mesma funcionalidade do aplicativo de volume do sistema.