基本的に,DialogResultはオプションダイアログボックスなどで使うのに最適な解です。
つまり,[OK][キャンセル]を持ち,この2つだけがダイアログボックスを閉じる手段である場合です。
# システムメニューの[閉じる]は[キャンセル]と同等の扱い。右上のxも同じ。
その場合でも,オプションデータ自体は別途受け渡しが必要になります。
上記以外の場合では,Formに終了状態のプロパティを用意し,DialogResult.OKを設定して閉じる,というのが簡単な方法だと思います。
コード:
public enum FinishState
{
NotFinished,
UsePattern1,
UsePattern2,
UsePattern3,
}
public class Form2 : Form
{
public FinishState State { get; private set; }
public Form2 () { /* ... */ } // 省略
private void UsePatternButtonClicked (FinishState state)
{
State = state;
DialogResult = DialogResult.OK;
Close();
}
private void UsePattern1_Click (object sender, EventArgs e)
{
UsePatternButtonClicked(FinishState.UsePattern1);
}
private void UsePattern2_Click (object sender, EventArgs e)
{
UsePatternButtonClicked(FinishState.UsePattern2);
}
private void UsePattern3_Click (object sender, EventArgs e)
{
UsePatternButtonClicked(FinishState.UsePattern3);
}
private void Cancel_Click (object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
UsePattern1, UsePattern2, UsePattern3, Cancelという4つのボタンがあって,それぞれClickイベントがデフォルト名のハンドラに結びついている前提です。で,上記のようなFormを,
コード:
using (var form = new Form2())
{
if (form.ShowDialog() != DialogResult.OK)
{
return;
}
switch (form.State)
{
case FinishState.UsePattern1:
// UsePattern1用のコード
/* ... */
}
}
のように使います。
他にも,最初にオブジェクトを渡しておいてそのオブジェクトに値を設定しても良いです。
# オプションダイアログだとこの方法になるかと。