2016-09-27 97 views
0

因此,我想在关闭应用程序或通过单击注销按钮注销应用程序之前执行确认,或者只需单击关闭该应用程序即可。如果我直接关闭应用程序,那么消息框只出现一次。但是,当我使用注销按钮时,消息框出现两次。注销消息框出现两次,当点击注销按钮

因此编码基本上是这样的:

Private Sub btnLogOut_Click(sender As Object, e As EventArgs) Handles btnLogOut.Click 
    If logOut() Then 
     Me.Dispose() 
     frmLogIn.Show() 
    End If 
End Sub 

Private Sub frmHome_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 
    If logOut() Then 
     Me.Dispose() 
     frmLogIn.Show() 
    Else 
     e.Cancel = True 
    End If 
End Sub 

Public Function logOut() As Boolean 
    Dim respond = MessageBox.Show("Are you sure you want to log out?", "Log Out", MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
    If respond = DialogResult.Yes Then 
     blnResult = True 
    Else 
     blnResult = False 
    End If 
    logOut = blnResult 
End Function 

所以任何人都可以帮助吗?

+3

当他们点击您明确要求的按钮时,您再次询问表单何时关闭。摆脱消息框 - 你基本上是问他们是否打算点击他们刚刚点击的按钮。它令人讨厌 – Plutonix

+2

您的问题是由于在Click事件中调用Me.Dispose而导致的。此调用会引发FormClosing事件处理程序,并且您再次要求确认注销。只需删除单击按钮中的代码并将其替换为Me.Close即可。但我真的同意@Plutonix。不要要求确认刚刚做出的选择,除非你有一些未保存的数据,如果你关闭表格 – Steve

+0

@Plutonix我想使它像你要退出通过点击注销按钮或“x”关闭图标应用程序的右上角。但是,必须提示消息框在离开前提问。 –

回答

0

在你注销按钮事件单击

If logOut() Then //first line 
    Me.Dispose()//second line 
    frmLogIn.Show()//third line 

结束如果在你的第二行//第四行

这是Me.Dispose,你配置的形式,在其他学期你关闭它。所以,你的form_close事件将被触发,因为你处理你的表单。这就是消息框弹出两次的原因。

+0

好的。我明白。 –