除非他们合作,为什么取消不取消并且不返回?

时间:2012-05-22 22:38:16

标签: c# winforms formclosing

使用此代码:

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 被注释掉,其余的代码(关闭和处理)运行(所以,如果我然后尝试保存更改,我得到的错误信息是连接是不公开)。

所以,我必须做两件事(取消和返回)以使代码工作,因为我认为它应该与任何一个。

这是正常/按预期的吗?

2 个答案:

答案 0 :(得分:2)

是的,这是预期的。 e.Cancel告诉框架您已处理事件,并且您不希望自动行为。没有它,在您的方法返回后,框架将继续处理该事件,并关闭窗口。

return中止当前方法的执行,因此最后的内容不会执行。

答案 1 :(得分:2)

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

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

会更清晰,而且稍微复杂一些。