C#メモ ×ボタンがクリックされたことを検知してみる

C#

はじめに

野暮用で必要になって。

ポイントはざっくりこんな感じ。

  • フォームのFormClosingイベントを追加する
  • イベントを追加するとメソッドが勝手に追加されるので、FormClosingEventArgsって型の引数のCancelプロパティを変更する
    Cancelプロパティはtrueにするとフォームを閉じるし、falseにするとフォームを閉じない

準備

イベントを追加する

まずは、イベントを追加する。

  1. ×ボタンがクリックされたことに気づきたいフォームのプロパティを開く。
    23478_01
  2. プロパティのタブの上の方にあるカミナリみたいなアイコンをクリックする。
    23478_02
  3. FormClosingってのを探してダブルクリックする。
    ※似たようなのでFormClosedってのがあるけど、これはフォームを閉じたあとのイベントなので間違えないように注意する。
    23478_03
  4. フォームのコードに"フォームのクラス名_FromClosing"ってメソッドが追加されたら、イベントの追加はおしまい。

コードを書く

んで、コードはこんな感じ。
とりあえず、よくある"ウィンドウを閉じますか?"って聞いておいて「はい」をクリックしたら閉じるようにする。

private void Proto_FormClosing(object sender, FormClosingEventArgs e)
{
    // 質問ダイアログを表示する
    DialogResult result = MessageBox.Show("ウィンドウを閉じますか?", "質問", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if(result == DialogResult.No)
    {
        // はいボタンをクリックしたときはウィンドウを閉じる
        e.Cancel = true;
    }
}

実行

実行してみると、こんな感じ。
まずはフォームを表示しといて、×ボタンをクリックする…。

23478_04

と、質問してくる。
これで、「はい」ボタンをクリックするとフォームを閉じる。
「いいえ」ボタンをクリックするとフォームを閉じない。

23478_05

ちなみに、FormClosingってイベントは×ボタンだけでなくて、this.Close()でも何でもフォームを閉じようとすると発生しちゃう。

おわりに

んまま、メモってことで。