質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

1回答

1817閲覧

ContextMenuStrip利用時、タスクトレイのオーバーフロー領域が消えない

ttact

総合スコア170

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2021/06/28 02:11

編集2021/06/28 05:29

追記

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.NET Framework 4.6.1 でNotifyIconを使用するサンプルを作ってやってみましたが、普通にアイコンが削除され、どうも現象が再現出来ませんでした。(ToolStripMenuItemをクリックするとApplication.Exitで終了するだけのシンプルなものです)
外しているかもしれませんが、Application.Exit前に_notifyIcon.Visible=falseに設定したり、_notifyIcon.Disposeを呼ぶとどうなりますか?

投稿2021/06/28 05:07

編集2021/06/28 05:18
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttact

2021/06/28 05:25

一度プロジェクトを削除してしまっていたため、再度作り直してみたところ、私のほうでも再現しなくなりました。。。ちょっと混乱しています。 Teamsのほうは動作変更ないので、Windowsの再起動等が影響していることはないようです。 私のプロジェクト再作成の手順がおかしかったのだと思いますが、大変申し訳なく。 念のためにMenuItemのイベントハンドラにて、Application.Exit();の前の行に_notifyIcon.Dispose()は追加しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問