2014-06-06 81 views
0

我想向用戶提供要麼運行在後臺的應用程序或永久關閉其在單擊窗體的關閉按鈕時的選項。此時,當使用單擊「是」時,對話框將再次出現,再次單擊「是」時,應用程序將退出。任何想法有什麼不對?阻止Windows形式是/否

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) 
    Handles Me.FormClosing 

    Dim result = DialogResult = MessageBox.Show("Would you like the backup tool 
to run in the background?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) 

    If result = True Then 
     e.Cancel = True 
     Me.Hide() 
    ElseIf result = False Then 
     Application.Exit() 
    End If 
End Sub 
+0

你應該從Option Strict開始。你有一個YESNO對話框,但評估它爲「真」。當你調用Application.Exit時,它也想關閉表單 - 對於其他工作不應該工作 – Plutonix

回答

4

您正在比較Form.DialogResult和MessageBox.Show()的返回值。它永遠是假的。這使您調用Application.Exit(),它再次觸發FormClosing事件。正確的代碼應該是這樣的:

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 
    Dim result = MessageBox.Show("Would you like the backup tool to run in the background?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) 
    If result = DialogResult.Yes Then 
     e.Cancel = True 
     Me.Hide() 
    End If 
End Sub 

Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed 
    Application.Exit() '' Not that clear that this is really necessary!! 
End Sub 

請記住,你有一個隱藏的窗口,除非你添加代碼以恢復它的用戶不能回去容易。

+0

是的,我有應用程序在系統托盤中運行,並附有通知。很好的答案。 – alwaysVBNET

+1

不要這樣做。從上下文菜單中獲取Exit命令時,只需將布爾變量設置爲True即可。 「我真的要退出」命令。你可以在FormClosing中測試它。否則就是一個很好的例子,爲什麼當你問一個問題時,總是很重要的解釋你想完成什麼。 –