Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果e.Cancel=true,我应该在何时何地调用base.OnClosing(e)?_C#_Wpf_Window - Fatal编程技术网

C# 如果e.Cancel=true,我应该在何时何地调用base.OnClosing(e)?

C# 如果e.Cancel=true,我应该在何时何地调用base.OnClosing(e)?,c#,wpf,window,C#,Wpf,Window,我试过几个不同的地方,它似乎在任何地方都有效,只是想知道它是否重要。Doesbase.onclose(e)实际执行任何操作?来自: 从Window派生的类型可以重写OnClose。被推翻的 如果需要关闭,则方法必须在基类上调用OnClosing 提高 在您的情况下,似乎没有必要实际引发关闭事件,因此调用base.OnClosing是否以及在何处都无关紧要 但是,如果不重写OnClosing方法,而只是添加一个Closing处理程序,则可以避免首先决定此问题: protected overrid

我试过几个不同的地方,它似乎在任何地方都有效,只是想知道它是否重要。Does
base.onclose(e)实际执行任何操作?

来自:

从Window派生的类型可以重写OnClose。被推翻的 如果需要关闭,则方法必须在基类上调用OnClosing 提高

在您的情况下,似乎没有必要实际引发
关闭
事件,因此调用
base.OnClosing
是否以及在何处都无关紧要


但是,如果不重写
OnClosing
方法,而只是添加一个
Closing
处理程序,则可以避免首先决定此问题:

protected override void OnClosing(CancelEventArgs e)
{
    base.OnClosing(e); // here?

    if (cancelCondition)
    {
        base.OnClosing(e); // or here?
        e.Cancel = true;
        base.OnClosing(e); // or here?
    }

    base.OnClosing(e); // or here?
}

...
私有无效窗口\u关闭(对象发送方,取消事件参数)
{
如果(取消条件)
{
e、 取消=真;
}
}
来自:

从Window派生的类型可以重写OnClose。被推翻的 如果需要关闭,则方法必须在基类上调用OnClosing 提高

在您的情况下,似乎没有必要实际引发
关闭
事件,因此调用
base.OnClosing
是否以及在何处都无关紧要


但是,如果不重写
OnClosing
方法,而只是添加一个
Closing
处理程序,则可以避免首先决定此问题:

protected override void OnClosing(CancelEventArgs e)
{
    base.OnClosing(e); // here?

    if (cancelCondition)
    {
        base.OnClosing(e); // or here?
        e.Cancel = true;
        base.OnClosing(e); // or here?
    }

    base.OnClosing(e); // or here?
}

...
私有无效窗口\u关闭(对象发送方,取消事件参数)
{
如果(取消条件)
{
e、 取消=真;
}
}

如果要更改关闭事件的触发方式,应在关闭时覆盖
onclose

  • 如果要在窗体关闭时执行代码,并让它在任何其他
    关闭
    处理程序之前运行,请将其他代码放在
    base.OnClosing
    之前

  • 如果要在所有其他处理程序运行后运行代码,请将该代码放在调用
    base.OnClosing
    之后

  • 如果只希望有条件地运行所有其他处理程序,请将
    base.OnClosing
    放在某种条件块中,以便仅在希望运行其他处理程序时调用它


  • 在所有情况下,都没有一个正确的答案来说明它的归属。您应该将它放在您希望“所有其他事件处理程序”运行的任何位置,相对于您添加的任何代码。

    如果要更改关闭事件的触发方式,您应该覆盖
    onclose

  • 如果要在窗体关闭时执行代码,并让它在任何其他
    关闭
    处理程序之前运行,请将其他代码放在
    base.OnClosing
    之前

  • 如果要在所有其他处理程序运行后运行代码,请将该代码放在调用
    base.OnClosing
    之后

  • 如果只希望有条件地运行所有其他处理程序,请将
    base.OnClosing
    放在某种条件块中,以便仅在希望运行其他处理程序时调用它

  • 在所有情况下,都没有一个正确的答案来说明它的归属。您应该将它放在您希望运行“所有其他事件处理程序”的任何位置,相对于添加的任何代码。

    是否尝试将其取出(仅具有空白覆盖函数),并查看它是否做了什么?是的。它“似乎”什么都没做。我要确认一下。你有没有试过把它取出来(只是有一个空白的覆盖功能)看看它有没有用?是的。它“似乎”什么都没做。我要求确认一下。