繁体   English   中英

在提示后单击“关闭”按钮时终止程序-Visual Basic

[英]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. CloseForm2.Close 一旦关闭程序的活动窗体,就可以关闭两个窗体。 但是,这又是一个问题。 单击关闭按钮后,“消息框”将填满整个屏幕,而不会收听我的命令。 有人对此有解决方案吗?

所以..

如果用户在Form1单击“关闭”,则程序应终止而不显示任何消息框。

如果用户在Form2Form3Form4关闭时钟,则当用户在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM