モーダルフォーム側はボタンのDialogResultプロパティを設定すれば、フォームを閉じるコードや値を返すコードを記述する必要はありません。
ShowDialog()
メソッドを用います。using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MultiModalFormApp
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SubForm1 subform1 = new SubForm1();
DialogResult dr = subform1.ShowDialog();
label1.Text = Enum.GetName(typeof(DialogResult), dr);
}
}
}
SubForm1 subform1 = new SubForm1();
にてサブフォームのインスタンスを作成します。DialogResult dr = subform1.ShowDialog();
ShowDialog()メソッドを呼び出しフォームをモーダルで表示します。モーダルフォームの結果がShowDialogメソッドの戻り値で帰ります。label1.Text = Enum.GetName(typeof(DialogResult), dr);
モーダルフォームの戻り値DialogResultの値名をラベルに表示します。enumの値の名前の取得についてはこちらの記事を参照してください。