FormClosing を処理して、フォームが閉じないようにしました。
if(e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
SomeFunction();
}
ただし、SomeFunction() に入ると、stackoverflow 例外がスローされます。この理由は何でしょうか?ありがとう。
編集:
デバッグしないのは悪いことです。SomeFunction() にはいくつかのフィールド検証があり、フィールドが有効な場合は、フォームの Close() 関数を呼び出します。そして、FormClosing() を処理しているので、SomeFunction() で再び通過します。Close() 関数の呼び出しも CloseReason.UserClosing の下にあるとは知りませんでした。回答ありがとうございます。