-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被注释掉,其余代码(关闭和处置)运行(因此,如果我尝试保存更改,我会收到连接未打开的错误消息)。

因此,我必须同时执行(取消和返回)以使代码能够像我认为的那样与任何一个一起工作。

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

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 回答