前回はランチャーアプリを作成しました。ところでランチャーアプリはパソコンを使用しているあいだ、そのまま使い続けるものです。×ボタンを押しても終了させずタスクトレイのなかで小さくなってもらうためにはどうすればいいのでしょうか?
A、T、F? なんか変なソフトがありますが・・・
アプリをタスクトレイに表示させるためにはアイコンが必要です。アイコンを作成しました。
ランチャーアプリだから「L」ってオイっ!
デザイナからNotifyIconを追加。プロパティーIconを設定。
これで起動するとアイコンがタスクトレイに表示されます。
×ボタンをクリックするとFormClosingイベントが発生します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public partial class Form1 : Form { public Form1() { // その他、省略 FormClosing += Form1_FormClosing; notifyIcon1.MouseClick += NotifyIcon1_MouseClick; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { } } |
Form1_FormClosing内に以下を書き込みます。
e.Cancel = true;
this.Visible = false;
これで×をクリックしても終了しないでフォームが見えなくなります。しかしそれだけでは不十分です。もう一度見えるようにする手段と、本当に終了させるための手段を用意する必要があります。
まず見えるようにする方法。
1 2 3 4 5 6 7 |
public partial class Form1 : Form { private void NotifyIcon1_MouseClick(object sender, MouseEventArgs e) { this.Visible = true; } } |
次に終了させる方法。
ボタンを追加して、
1 2 3 4 5 6 7 8 9 |
public partial class Form1 : Form { bool IsEnd = false; private void buttonEnd_Click(object sender, EventArgs e) { IsEnd = true; Application.Exit(); } } |
Application.Exit()を実行してもForm1_FormClosing内にかかれている処理が実行させるだけなので終了できません。そこでフィールド変数 IsEndを用意してtrueに変更してIsEnd==trueの場合はそのまま終了させるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public partial class Form1 : Form { private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (!IsEnd) { e.Cancel = true; this.Visible = false; return; } // IsEnd==trueの場合は普通に終了させる } } |