Form004.2. フォームの終了を阻止する

過去のブログのアーカイブ
この記事は前身のブログのアーカイブを引き継いだものです. 画像が正しく表示できないなど,コンテンツの表示に問題がある恐れがあります.

テキストエディタを作るときみたいに、保存されtない状態でフォームが間違えられて×ボタンを押されてしまい、そのまま終了してしまうとちょっとまずいですよね。
フォームの終了前に確認を入れるプログラムを作ってみましょう。

Form.FormClosingイベント

フォームが閉じられる前に呼び出されるイベント”FormClosing”イベントというものがあります。これを設定することでフォームの阻止をすることができます。
また、似たイベントにFormClosedというイベントがあります。こちらはフォームが閉じられたあとに呼び出されるイベントです。なので阻止するという今回の目的には合いません。
d25
 
フォームを選択し、F4ボタンでイベントウィンドウを表示し、上部のイナズママークを選択し、イベントのメニューにします。そこからFormClosingイベントを探し、それをダブルクリックしましょう。
そうするとこんなメソッドが作られます。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
}

この中の阻止する命令を書きます。

阻止する命令を書こう

そしするのは非常に簡単です。このFormClosingイベントにはFormClosingEventArgs型のeというパラメータがありますよね。
このeにCancelというプロパティがあります。これをtrueにするだけで、フォームが閉じられるのを阻止することができるのです。
しかし、選択肢もなしに阻止だけしてしまうとフォームを閉じる手段がなくなってしまいます。
もしこのコードを試しに実行してしまった場合は、デバッグしてる場合はデバッグの終了を、違うならタスクマネージャーから強制終了しましょう。

選択肢を表示する

このままではいけないので選択肢を終了しましょう。前項で紹介したMessageBoxを利用します。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
    DialogResult res = MessageBox.Show("本当に終了しますか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
    if (res == DialogResult.Cancel)
        e.Cancel = true;
}

これは単純に選択肢を表示し、キャンセルボタンが押されたら閉じられるのを阻止するというプログラムです。
2016-07-24
実にシンプルですね。

まとめ

閉じられるのを阻止するにはForm.FormClosingイベントを設定し、e.Cancelをtrueにする