C# 为什么取消不取消和返回不返回,除非他们合作?

C# 为什么取消不取消和返回不返回,除非他们合作?,c#,winforms,formclosing,C#,Winforms,Formclosing,使用此代码: private void PlatypusMainForm_FormClosing(object sender, FormClosingEventArgs e) { if ((UnsavedChanges()) && (!(UserWantsToMoveOnWithoutSaving(CONFIRM_CLOSE_UNSAVED_CHANGES_LOST, "Close Without Saving?")))) { e.Cancel = tru

使用此代码:

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)将运行(因此,如果我随后尝试保存更改,则会收到连接未打开的错误消息)

因此,我必须同时执行两项操作(取消和返回),以使代码正常工作,因为我认为这两项操作中的任何一项都应该如此


这正常吗/如预期的那样?

是的,如预期的那样。
e.Cancel
告诉框架您已经处理了事件,并且您不想要自动行为。如果没有它,在方法返回后,框架将继续处理事件,并关闭窗口


返回
中止当前方法的执行,因此结尾的内容不会执行。

取消默认为false,因此如果您注释掉它,它永远不会设置为true。 如果将return取出,它将在其余代码执行后才返回,或者在您的情况下,返回错误

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

会更清晰,也不会那么复杂。

x=y做什么?返回怎么办?他们如何互动?