2017-06-09 54 views
-2

我嘗試使用表單關閉事件退出應用程序,但確認消息框出現兩次。使用FormClosing事件VB.net關閉應用程序

這是我有:

Private Sub FrmMainPlatform_FormClosing(sender As Object, e As FormClosingEventArgs) _ 
Handles MyClass.FormClosing 

    Dim result As Integer 
    result = MessageBox.Show("Are you want to close", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.None) 
    If (result = DialogResult.No) Then 
     e.Cancel = True 
    Else 
     Application.Exit() 
    End If 

End Sub 

我也試圖與此解決方案:

Private Sub FrmMainPlatform_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
Select Case MessageBox.Show("Are you sure you want to exit?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
    Case Windows.Forms.DialogResult.Yes 
     'nothing to do here the form is already closing 
    Case Windows.Forms.DialogResult.No 
     e.Cancel = True 'cancel the form closing event 
     'minimize to tray/hide etc here 
    End Select 
End Sub 

的形式被關閉,但應用程序,我仍然在運行。

+0

如果單擊yes,它會顯示兩次嗎? – dbasnett

+0

是它出現兩次 –

+0

這段代碼對我來說工作得很好,所以在其他地方一定有其他的東西導致了這個問題。你確定這是兩次調用的確切代碼嗎?在Select Case MessageBox.Show(「你確定要退出嗎?」,「確認」,MessageBoxButtons.YesNo,MessageBoxIcon.Question)'放置一個斷點並運行代碼。它打了兩次嗎? – Bugs

回答

0
Private Sub FrmMainPlatform_FormClosing(sender As Object, e As FormClosingEventArgs) _ 
    Handles Me.Closing 

    Dim result As Integer 
    result = MessageBox.Show("Are you want to close", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.None) 
    If (result = DialogResult.No) Then 
     e.Cancel = True 
    Else 
     Application.Exit() 
    End If 

End Sub 

嗨, 我得到這個問題的臨時解決方案。 Exit方法不會引發Closed和Closing事件,這些事件從.NET Framework 2.0開始已過時。

0

@karihalan,我相信你首先需要確保Form1實際上是你的應用程序的啓動形式。您可以從Project的屬性中確認這一點。如果是這樣,那麼你甚至不需要調用Application.Exit()。

其次,嘗試用MyBase.FormClosing更換Me.FormClosing ......像這樣:

Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing 

此外,還要確保你不訂閱兩次形成關閉的事件,也許使用AddHandler語句。

希望這會有所幫助。

+0

嗨阿扎茲我試過這個,但同樣的結果出現兩次 –

+0

哦,我認爲你使用兩個Handles語句兩次訂閱FormClosing事件。一個使用Form1_FormClosing方法,另一個使用FrmMainPlatform_FormClosing。您需要訂閱FormClosing一次。換句話說,將Handles語句與Form1_FormClosing或FrmMainPlatform_FormClosing一起使用。 –

+0

對不起,我發現我們的堆棧溢出兩個解決方案。我只是貼上了這個解決方案。現在我已經用第二個選項更改了自己的代碼。兩種解決方案應用於相同的形式 –

0

更新:您可以嘗試關閉所有窗體。我會把它放在主要的封閉事件中。

For each f as Form in My.Application.OpenForms 
f.Close() 
Next 

擺脫第一個代碼塊。這就是我所做的,它問我是否只想關閉一次,當我點擊是時關閉,而當我說不時,關閉。

Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
Select Case MessageBox.Show("Are you sure you want to exit?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
    Case Windows.Forms.DialogResult.Yes 
     'nothing to do here the form is already closing 
    Case Windows.Forms.DialogResult.No 
     e.Cancel = True 'cancel the form closing event 
     'minimize to tray/hide etc here 
    End Select 
End Sub 
+0

嗨羅奇,其關閉當前形式但仍然應用程序運行在任務管理器 –

+0

@ karihalanudhayasuriyan,你能檢查你的項目的啓動形式嗎?它是什麼? –

+0

您的項目是否包含多個表單? – BuddyRoach