■ ポイント
Point1
* プロジェクトは、Windows Formのままでいいが、 Program.cs を以下の[常駐アプリ]のように書き換える[通常]
Application.Run(new Form1());[常駐アプリ]
new Form1() Application.Run();
Point2
* NotifyIcon を実装する
■ その他の実装方法
https://qiita.com/mitsu_at3/items/f4960af27cb32ef3e0f9のように、ApplicationContext を利用する方法がある なお、ApplicationContext については、以下の関連記事を参照。https://blogs.yahoo.co.jp/dk521123/38020554.html
■ サンプル
* 以下の仕様でサンプル作成 [a] タスクバーには表示させない [b] タスクトレイにアイコンを置く [c] タスクトレイのアイコンをダブルクリックすると、Formが表示 [d] タスクトレイのアイコンを右クリックすると、[表示][終了]が表示
コントロール構成
Form* MinimizeBox : False * Text : Hello World!NotifyIcon
* ContextMenuStrip : contextMenuStrip1 * Icon : アイコン * Text : Hello World!!ContextMenuStrip (右クリック用)
* Items + toolStripMenuItem1 - Text : 表示 + toolStripMenuItem2 - Text : 終了
コード
Program.csusing System; using System.Windows.Forms; namespace SampleForm { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { //Application.EnableVisualStyles(); //Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); using (var form = new Form1()) { Application.Run(); } } } }Form1.cs
using System; using System.Windows.Forms; namespace SampleForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void notifyIcon1_DoubleClick(object sender, EventArgs e) { this.Visible = true; } private void toolStripMenuItem1_Click(object sender, EventArgs e) { this.Visible = true; } private void toolStripMenuItem2_Click(object sender, EventArgs e) { this.notifyIcon1.Visible = false; Application.Exit(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Visible = false; } } }
参考文献
http://pineplanter.moo.jp/non-it-salaryman/2017/06/01/c-sharp-tasktray/http://njs-net.hatenablog.com/entry/2015/12/04/173158