アプリケーション設定で、シャットダウン モードを定義できます (メインフォームで閉じるか、最後のフォームで閉じる)。最後のフォームで閉じるように設定してみてください。
更新:私は自分で試してみましたが、呼び出し元を閉じました(別のフォームで ShowDialog() を呼び出すフォームもダイアログ自体を閉じます。これは設計によるものだと思います。
ただし、このコードを使用して、ダイアログを作成し、呼び出し元を閉じても、ダイアログは引き続き存在します。
// inside formA
private void button2_Click(object sender, EventArgs e)
{
var owner = new Form();
var dialog = new FormB();
// attach to the dialog.button1.Click event to force a close
// of the current formA instance.
// button1.modifiers has (at least) to be set internal
dialog.button1.Click += (x, y) => this.Close();
dialog.ShowDialog(owner);
dialog.Dispose();
owner.Dispose();
}
ここで FormB の button1 をクリックすると、FormA が閉じ、Form B がまだ存在します。FormA は MainForm ではありません。