システムトレイにあるアプリケーションがあります。notifyIcon
まだ表示されていない場合は、ユーザーがクリックしたときに表示したいと思います。すでに表示されている場合は、非表示にする必要があります。また、ユーザーがフォーム以外の場所をクリックすると、フォームは非表示になります (表示されている場合)。
私のコードは次のようになります。
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);
}
}
}
コードの問題はonDeactivated
、クリック呼び出しの前に呼び出され、フォームが非表示になり、notifyIcon1_MouseClicked
再表示されることです。または他の場所をクリックしたためにフォーカスが失われたかどうかを検出できればnotifyIcon
、問題は解決します。
私は調査を行い、同様のスレッドを見つけましたが、onDeactivated
呼び出されたときにマウスの位置がトレイの上にあるかどうかを検出しただけの解決策です: NotifyIcon (タスクバー アイコン) をクリックしてウィンドウを切り替えます。
更新:投稿したソリューションは、ユーザーのマウスがタスクバーのトレイ アイコンの上にあるかどうかのみを検出するため、他のトレイをクリックしてもonDeactivated
イベントは発生しません。システム ボリューム アプリと同じ機能を取得したい。