![](/img/trans.png)
[英]Visual Basic MsgBox vbYesNo Doesn't accept when the 'No' button is clicked
[英]Terminate program when Close button is Clicked after Prompt - Visual Basic
我的WindowsFormApplication
有两个窗体,分别称为Form1和Form2。 这个想法是当程序关闭时,它会显示一个对话框来确认它。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.Show()
Me.Close()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
MessageBox.Show("You are About to cancel the Setup.","Cancel Setup?",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button1)
End Sub
End Class
直到这里,我的代码都可以正常工作,但是问题是当我单击Button1时,出现了消息框,以确认Form1的关闭。
我不希望发生这种情况,因此我尝试将Me.Close()
更改为Me.Hide
。 我成功地阻止了消息框的出现,但是又遇到了另一个问题。 表单隐藏时,它在后台保持活动状态,我也不希望这种情况发生。
我在Form1_FormClosing
添加的另一件事是Me. Close
Me. Close
和Form2.Close
。 一旦关闭程序的活动窗体,就可以关闭两个窗体。 但是,这又是一个问题。 单击关闭按钮后,“消息框”将填满整个屏幕,而不会收听我的命令。 有人对此有解决方案吗?
所以..
如果用户在Form1
单击“关闭”,则程序应终止而不显示任何消息框。
如果用户在Form2
, Form3
或Form4
关闭时钟,则当用户在MessageBox
单击“ Yes
时,程序将终止,否则将不受影响(尤其是数据)。
这种工作方式是当用户在Form1
单击“关闭”时,程序终止而没有MessageBox
并且如果用户单击“其他Forms
”中的Forms
关闭Forms
,则会出现一个MessageBox
,询问您是否确定要关闭程序。 如果用户单击“是”,则该程序将终止,因为DialogResult
为“是”并且Form1.Closing
Cancel变为False并关闭Form1
(由于Closure类型在“程序属性”中设置为“ First Form Closes”,因此将终止该程序) Form1.Closing
取消变为True,这将防止当前表单关闭并丢失任何数据。
此代码转到Form1
:
Imports System.ComponentModel
Public Class Form1
Friend closeProgramAlreadyRequested As Boolean = False
Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
closeProgramAlreadyRequested = False
End Sub
End Class
此代码适用于Form2
,并且也适用于其他Forms
,但Form1
除外:
Imports System.ComponentModel
Public Class Form2
Private Sub Form2_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
If Form1.closeProgramAlreadyRequested = False Then
Dim result As DialogResult = MessageBox.Show("You are About to cancel the Setup.", "Cancel Setup?", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
If result = DialogResult.No Then
e.Cancel = True
Else
e.Cancel = False
Form1.Close()
End If
End If
End Sub
End Class
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.