2016-09-14 66 views
-1

我有一個基本窗體類,我有我的論壇繼承。在執行繼承的表單中的代碼之前,是否可以從基本表單執行代碼?我有一個檢查,看看他們是否想關閉基類,我不想執行任何內容,直到他們對彈出窗體表示「是」。我怎樣才能做到這一點?窗體關閉事件

回答

0

爲了獲得我想要的確切行爲,我在基本關閉事件中添加了兩個事件。一個在檢查後立即執行,另一個在執行代碼後執行。然後,我將繼承的類上的FormClosing事件替換爲使用這兩個事件。這種方法給了我更多的自由,然後只是調用mybase .OnFormClosing

1

而不是在您的子類中處理事件,重寫OnFormClosing方法。然後你可以讓基類實現按照它的選擇進行。然後做你的東西。

Protected Overrides Sub OnFormClosing(e As System.Windows.Forms.FormClosingEventArgs) 
    MyBase.OnFormClosing(e) 
    'my stuff 
End Sub 
+0

這兩種解決方案都會導致我的程序兩次關閉關閉事件。這是正常的嗎? –

2

假設你已經在你的基類的FormClosing事件e.Cancel屬性設置爲true或false,你只需要在繼承的形式來檢查e.Cancel值:

Protected Overrides Sub OnFormClosing(e As FormClosingEventArgs) 
    MyBase.OnFormClosing(e) 

    If Not e.Cancel Then 
    MessageBox.Show("Doing Stuff") 
    End If 
End Sub 
+0

這兩種解決方案都會導致我的程序兩次經歷關閉事件。這是正常的嗎? –

+0

@DNet工程師是的,它將運行基本結束碼,然後運行您的繼承基礎結束碼。如果您需要幫助,請發佈您的代碼,因爲我們看不到您的代碼是什麼樣的。 – LarsTech

+0

它與您的發佈代碼幾乎相同。它將執行MessageBox,然後再次顯示消息框。我想我可以添加一個布爾值來阻止它第二次在繼承類之後通過基類運行 –