-1

このコードで:

private void PlatypusMainForm_FormClosing(object sender, FormClosingEventArgs e) {
    if ((UnsavedChanges()) && (!(UserWantsToMoveOnWithoutSaving(CONFIRM_CLOSE_UNSAVED_CHANGES_LOST, "Close Without Saving?")))) {
        e.Cancel = true;
        return;
    }
    if (oracleConnectionMainForm.State == ConnectionState.Open) {
        oracleConnectionMainForm.Close();
        oracleConnectionMainForm.Dispose();
    }
}

... e.Cancel = trueがコメントアウトされている場合、フォームはとにかく閉じます。

... returnがコメントアウトされている場合、残りのコード (Close と Dispose) が実行されます (そのため、変更を保存しようとすると、接続が開いていないというエラーメッセージが表示されます)。

したがって、コードを動作させるには、両方 (キャンセルとリターン) を実行する必要があります。

これは正常ですか?/予想どおりですか?

4

2 に答える 2

2

はい、予想通りです。はe.Cancel、イベントを処理したこと、および自動動作を望まないことをフレームワークに伝えます。これがないと、メソッドが戻った後、フレームワークは引き続きイベントを処理し、ウィンドウを閉じます。

はこのreturn現在のメソッドの実行を中止するため、最後のものは実行されません。

于 2012-05-22T22:42:05.030 に答える
2

Cancel はデフォルトで false に設定されているため、コメントアウトすると true に設定されません。return を取り出すと、残りのコードが実行されるまで、またはあなたの場合はエラーが発生するまで戻りません。

if (SomeCondition)
{
  e.Cancel = true;
}
else
{
  // Do Something
}

より明確になり、少し複雑ではなくなります。

于 2012-05-22T22:46:32.317 に答える