2

FormClosing を処理して、フォームが閉じないようにしました。

if(e.CloseReason == CloseReason.UserClosing)
{
    e.Cancel = true;
    SomeFunction();
}

ただし、SomeFunction() に入ると、stackoverflow 例外がスローされます。この理由は何でしょうか?ありがとう。


編集:

デバッグしないのは悪いことです。SomeFunction() にはいくつかのフィールド検証があり、フィールドが有効な場合は、フォームの Close() 関数を呼び出します。そして、FormClosing() を処理しているので、SomeFunction() で再び通過します。Close() 関数の呼び出しも CloseReason.UserClosing の下にあるとは知りませんでした。回答ありがとうございます。

4

1 に答える 1

1

スタックオーバーフローの一般的な原因は、無限再帰です。

SomeFunction()再度呼び出されないことを確認する必要がありSomeFunction()ます(処理しているイベントをトリガーすることで可能です)。

デバッガーで呼び出しスタックをチェックして、これが当てはまるかどうかを確認できます(上記のコメントのとおり)。

于 2013-01-30T01:48:28.567 に答える