[英]If e.Cancel = true, when and where should I call base.OnClosing(e)?
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?
}
我嘗試了幾個不同的地方,它似乎在任何地方工作,只是想知道它是否重要。 base.OnClosing(e);
實際上做了什么?
來自MSDN :
從Window派生的類型可以重寫OnClosing。 如果需要引發Closing,則重寫的方法必須在基類上調用OnClosing
在你的情況下,似乎沒有必要實際提出Closing
事件,因此無論你base.OnClosing
何地調用base.OnClosing
。
但是,如果您不重寫OnClosing
方法,則可以避免首先決定這一點,而只需添加一個Closing
處理程序:
<Window ... Closing="Window_Closing">
...
</Window>
private void Window_Closing(object sender, CancelEventArgs e)
{
if (cancelCondition)
{
e.Cancel = true;
}
}
如果要更改觸發事件的觸發方式,則應該重寫OnClosing
。
如果要在表單關閉時執行代碼並使其在任何其他Closing
處理程序之前運行,請將其他代碼放在base.OnClosing
之前。
如果您希望在所有其他處理程序運行后運行代碼,請在調用base.OnClosing
之后輸入該代碼。
如果您只想有條件地運行所有其他處理程序,請將base.OnClosing
放在某種條件塊中,以便僅在您希望運行其他處理程序時調用它。
在所有情況下,沒有一個正確的答案。 您應該將它放在任何您想要“所有其他事件處理程序”的位置,相對於您添加的任何代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.