C# 如果e.Cancel=true,我应该在何时何地调用base.OnClosing(e)?
我试过几个不同的地方,它似乎在任何地方都有效,只是想知道它是否重要。DoesC# 如果e.Cancel=true,我应该在何时何地调用base.OnClosing(e)?,c#,wpf,window,C#,Wpf,Window,我试过几个不同的地方,它似乎在任何地方都有效,只是想知道它是否重要。Doesbase.onclose(e)实际执行任何操作?来自: 从Window派生的类型可以重写OnClose。被推翻的 如果需要关闭,则方法必须在基类上调用OnClosing 提高 在您的情况下,似乎没有必要实际引发关闭事件,因此调用base.OnClosing是否以及在何处都无关紧要 但是,如果不重写OnClosing方法,而只是添加一个Closing处理程序,则可以避免首先决定此问题: protected overrid
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
放在某种条件块中,以便仅在希望运行其他处理程序时调用它
在所有情况下,都没有一个正确的答案来说明它的归属。您应该将它放在您希望运行“所有其他事件处理程序”的任何位置,相对于添加的任何代码。是否尝试将其取出(仅具有空白覆盖函数),并查看它是否做了什么?是的。它“似乎”什么都没做。我要确认一下。你有没有试过把它取出来(只是有一个空白的覆盖功能)看看它有没有用?是的。它“似乎”什么都没做。我要求确认一下。