追記
radianさんの回答へのコメントに記載しましたが、プロジェクトを再作成したところ問題が再現しなくなってしまいました。。。
恐らく再作成時に何か変更した箇所があるのだとは思いますが、思い当たるところがなく。
検索してたどり着いた方には申し訳ないのですが、プロジェクトを再作成してみてください...。
以下は、問題があった時の内容です。
環境
- Windows 10 Pro 20H2 build 19042.1052
- Visual Studio Professional 2019 ver.16.10.2
- .NET 5 / C# / Windows Forms Application
やりたいこと
全体の仕様としては、以下の通りです:
0. タスクトレイに常駐するプロセス。
0. 起動すると、タスクトレイにアイコンを配置し、フォームは表示されない(タスクバーにも出さない)。
0. タスクトレイアイコンを左クリックすると、フォームを表示し、タスクバーにも出す。
0. 最小化すると、フォームを非表示にし、タスクバーにも出さない。
0. タスクトレイアイコンを右クリックすると、「終了(X)」等が含まれるメニューを出す。
解決したい問題
アプリケーションのタスクトレイアイコンが通知領域ではなくオーバーフロー領域(タスクバー上の^のボタンを押下すると出てくるやつ)にある状態で右クリックした場合、「終了(X)」等を選択してもオーバーフロー領域の表示が消えないので、消したく思っています。
ちなみに他のアプリケーションの挙動はまちまちです。以下は一例です:
- Microsoft Teamsで「設定」を選択すると、オーバーフロー領域は消えない。
- VMware Workstationで「VMware Workstation を開く(O)」を選択すると、オーバーフロー領域は消える。
- Windowsセキュリティで「通知オプションの表示」を選択すると、オーバーフロー領域は消える。
現下の実装
フォームのデザイナで、NotifyIcon及びContextMenuStripをそれぞれ1つずつ追加しています。それらに対してデザイナではイベントを追加していません。当該フォームのコンストラクタで以下のように実装しています。
C#
1public MyForm() 2{ 3 InitializeComponent(); 4 5 // タスクトレイアイコン右クリック時のメニューを初期化する。 6 var item = new ToolStripMenuItem(); 7 item.Text = "終了(&X)"; 8 item.Click += (s, e) => 9 { 10 Application.Exit(); 11 }; 12 _contextMenuStrip.Items.Add(item); 13 14 // タスクトレイアイコン左クリックでフォーム復帰。 15 _notifyIcon.MouseClick += (s, e) => 16 { 17 if((e.Button & MouseButtons.Left) != 0) 18 { 19 ShowInTaskbar = true; 20 WindowState = FormWindowState.Normal; 21 Show(); 22 } 23 }; 24 25 _notifyIcon.ContextMenuStrip = _contextMenuStrip; 26}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/28 05:25