C#_DialogResult.OK をキャンセルしたい

※ コントロールのボタンは、DialogResult で OK と設定。

 

経緯

OK ボタンを押しても、処理が正常に完了などしなかったならば
DialogResult.OK を押したことにしたくない ( Form を閉じたくない )。

Form1

       if ( form2.ShowDialog() != DialogResult.OK )
       {

 

Form2

    private void button_Click(object sender, EventArgs e)
    {
        if
        Form 1
       
        else
        Form 2 に留まっていたい
    }

 

return しても、button は DialogResult.OK としているので、
Form1 に処理が返ってしまう。

また、button_Click 後に if 節 の中 で DialogResult.OK としても
ボタンは押された後なので Form 1 に返らない。( 当たり前だが )

 

対処

Closing イベントを使う方法もあるようだが、簡単そうな方で。

処理が適切ならば DialogResult.OK設定する

前提
button_Click 前に Hoge_Event が走る。ex ) マウスが動いたりなど。

Form2

    private void button_Click(object sender, EventArgs e)
    {
        DialogResult.None なら何か処理走らせたり。
    }
   
    private void Hoge_Event(object sender, EventArgs e)
    {
        if
        button.DialogResult = DialogResult.OK;
       
        else
        button.DialogResult = DialogResult.None;
    }

 

 

こちらから。
http://blog.livedoor.jp/nakamurayoichi/archives/53650510.html
http://jeanne.wankuma.com/tips/csharp/form/closingcancel.html

 

以上。


Closing だとキャンセルや閉じるでも走ってしまう。
OK ボタン時のみにしたい。

なお↓のコードでフォームは閉じなくなる。

    FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
    }