C#メモ Formを閉じたときのイベントFormClosedでクリックしたボタンを判定してみる

C#

なんか…Formを閉じるときにクリックしたボタンごとにメソッドを用意するんでなくて、メソッドを1つにして処理をまとめたかった…で、ネットに聞いてみたらできたのでメモ。

ポイントとしてはこんなとこかも。

  • 用意するボタンのDialogResultプロパティを設定する
  • Formを閉じたときのイベントFormClosedのイベントを追加する
  • FormClosedイベントでDialogResultプロパティの値で処理を分ける

で、サンプルとして作ったFormの見た目はこんな感じ。
Formの名前はMainFormにした。追加したOKボタンとキャンセルボタンの名前それぞれOkayButtonとRejectButtonにした。

MainFormのプロパティはこんな感じ。

MainFormのイベントはこんな感じ。
フォームを閉じたときのイベントFormClosedを追加してOnFormClosedってメソッド名をつけた。

OkayButtonのプロパティはこんな感じ。
ボタンをクリックしたときに設定されるDialogResultの値は"OK"に設定しといた。

OkayButtonのイベントはこんな感じ。
クリックしたときのイベントはOnClickOkayButtonってメソッド名をつけた。

RejectButtonのプロパティはこんな感じ。
ボタンをクリックしたときに設定されるDialogResultの値は"Cancel"に設定しといた。

んで、イベントはこんな感じ。
クリックしたときのイベントはOnClickRejectButtonってメソッド名をつけた。

んで、コードはこんな感じ。
まずはOKボタンをクリックしたときのイベントのメソッドの内容。
ただ、Formを閉じるだけ。

///
/// OKボタンをクリックしたときのイベント
///
private void OnClickOkayButton(object objSender, EventArgs objArguments)
{
    try
    {
        // フォームを閉じる
        this.Close();
    }
    catch (Exception objException)
    {
         Console.WriteLine(objException.Message);
    }
    finally
    {
    } 
}

キャンセルボタンをクリックしたときのイベントのメソッドの内容。
これも、ただただFormを閉じるだけ。

///
/// キャンセルボタンをクリックしたときのイベント
///
private void OnClickRejectButton(object objSender, EventArgs objArguments) 
{
   try
   {
      // フォームを閉じる
      this.Close();
   }
   catch (Exception objException)
   {
      Console.WriteLine(objException.Message);
   }
   finally
   {
   } 
}

最後にフォームを閉じたときのイベントはこんな感じ。
DialogResultの内容でどのボタンをクリックしたか判定する感じ。

///
/// フォームを閉じたときのイベント
///
private void OnFromClosed(object objSender, FormClosedEventArgs objArguments)
{
    try
    {
        // フォームのDialogResultプロパティの値を取得する
        DialogResult eResult = this.DialogResult;
        // プロパティの値でどのボタンをクリックしたか判定する
        if(eResult == DialogResult.OK)
        {
            // OKボタンをクリックしたとき
            MessageBox.Show("OKボタンをクリックした");
        } else if (eResult == DialogResult.Cancel)
        {
            // キャンセルボタンをクリックしたとき
            MessageBox.Show("キャンセルボタンをクリックした");
        }
        else
        {
            // OKまたはキャンセルボタン以外(今回は×ボタン)をクリックしたとき
            MessageBox.Show("×ボタンをクリックした"); 
        }
    }
    catch(Exception objException) 
    { 
        Console.WriteLine(objException.Message); 
    }
     finally 
    { 
    }
}

実行してみたらこんな感じ。
まずはメインとなるフォームMainFormを表示する。

MainFormのOKボタンをクリックすると"OKボタンをクリックした"っていうメッセージのダイアログを表示する。

で、同じようにMainFormのキャンセルボタンをクリックすると"キャンセルボタンをクリックした"っていうメッセージのダイアログを表示する。

ちなみに、×ボタンをクリックすると"×ボタンをクリックした"っていうメッセージのダイアログを表示する。
×ボタンにはDialogResultの値を設定していないので、値はNoneってなってその他な分岐の処理を実行するため。

ちなみにボタンでなくてもFormのDialogResultプロパティの値を設定できるので、必要に応じて設定するといい感じになるかも。

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