簡體   English   中英

如果e.Cancel = true,我何時何地應該調用base.OnClosing(e)?

[英]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

  1. 如果要在表單關閉時執行代碼並使其在任何其他Closing處理程序之前運行,請將其他代碼放在base.OnClosing之前。

  2. 如果您希望在所有其他處理程序運行后運行代碼,請在調用base.OnClosing之后輸入該代碼。

  3. 如果您只想有條件地運行所有其他處理程序,請將base.OnClosing放在某種條件塊中,以便僅在您希望運行其他處理程序時調用它。

在所有情況下,沒有一個正確的答案。 您應該將它放在任何您想要“所有其他事件處理程序”的位置,相對於您添加的任何代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM