右クリックで表示されるコンテキストメニューから[終了]を選択すると、フェードアウトしながらアプリが終了する機能を、VS 2015を使って「時計」アプリに実装する。まずは、コンテキストメニューが表示されるようにしてみよう。
コンテキストメニューは、[ツールボックス]ウィンドウの中に([メニューとツール バー]カテゴリの)ContextMenuStripコントロールとして初めから登録されている。次の画面のように、ContextMenuStripコントロールをフォーム上にドラッグ&ドロップすると、フォームのコンテキストメニューを追加できる(なおここでは、追加したContextMenuStripコントロールの名前を「clockMenu」とした)。
さらに、追加したContextMenuStripコントロールを、フォーム(=Displayクラス)にコンテキストメニューとして設定する必要がある。これには、次の画面のように、フォームの[ContextMenuStrip]プロパティの値を「clockMenu」に設定すればよい。
これにより、フォームを右クリックすると、コンテキストメニュー「clockMenu」が表示されるようになる。後はclockMenuコントロール自体のメニュー項目を追加する。本稿ではアプリを終了するための[終了]項目を追加する。これも、次の画面のように、VS 2015のIDE上で簡単に追加できる(追加した項目の名前は「menuItemClose」とした)。
以上でコンテキストメニューの追加は完了だ。これが正常に動作するかを確認するために、いったんビルドを行い、プログラムを実行してみよう。マウスを右クリックすると、次の画面のように、正しくコンテキストメニューが表示されるはずだ。
しかし、終了処理をまだ実装していないので、[終了]をクリックしても実際にアプリを終了させることはできない。次に、アプリを実際に閉じる機能を実装していくことにしよう。
[終了]がクリックされたときに発生するClickイベントを処理するためのメソッド(Clickイベントハンドラー)を追加する。これには、次の画面のように、メニュー項目の[終了(X)]をダブルクリックするだけでよい。
これにより、次のメソッドがフォーム(=Displayクラス)のソースコードに追加される。
private void menuItemClose_Click(object sender, EventArgs e)
{
}
[終了]がクリックされると、このmenuItemClose_Clickメソッドが呼び出される。よって、先ほど調べたアプリを終了する方法(フォームを閉じるメソッド=Form.Closeメソッド)を、このメソッドの中に記述すれば、[終了]がクリックされたときにフォームが閉じられ、アプリが終了するようになる。具体的には次のようなコードを記述すればよい。
private void menuItemClose_Click(object sender, EventArgs e)
{
// フォームを閉じる → アプリを終了する
this.Close();
}
上記のコードにある「this」(C#の場合。VBでは「Me」)は、自分自身のオブジェクト、つまり(Formクラスを継承した)Displayクラスのインスタンスを意味する。よって「this.Close()」というコードは、DisplayオブジェクトのCloseメソッドを呼び出すという意味になる。
Copyright© Digital Advantage Corp. All Rights Reserved.