窗体关闭的原因

本文对比了VB6中Form_QueryUnload方法与.NET Framework中Form_Closing事件的处理方式,详细介绍了两种环境下捕获窗体关闭的不同原因及处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VB6中有个Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)的方法可以捕获窗体关闭时间,查了一下MSDN,UnloadMode有几个枚举值:
ConstantValueDescription
vbFormControlMenu0The user chose the Close command from the Control menu on the form.
vbFormCode1The Unload statement is invoked from code.
vbAppWindows2The current Microsoft Windows operating environment session is ending.
vbAppTaskManager3The Microsoft Windows Task Manager is closing the application.
vbFormMDIForm4An MDI child form is closing because the MDI form is closing.
vbFormOwner5A form is closing because its owner is closing.
使用如下简单代码:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Select Case UnloadMode
        Case vbFormControlMenu   
       MsgBox "vbFormControlMenu"
        Case vbFormCode
        MsgBox "vbFormCode"
        Case vbAppWindows
        MsgBox "vbAppWindows"             
    End Select
End Sub
Canel的值要是0就可以关闭,要是其他值,关闭无效,不明白干嘛不直接设Cancel为布尔变量。
但是也就能试试几个原因
在.NET下,这种捕获升级到CloseReason这个变量,如下
Private Sub Form_closing(ByVal sender As Object, ByVal e As Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Select Case e.CloseReason
            Case CloseReason.UserClosing
                MsgBox("Close form use X")
            Case CloseReason.FormOwnerClosing
                MsgBox("Close form inner")
            Case CloseReason.None
                MsgBox("unkown reason")
            Case CloseReason.TaskManagerClosing
                If MsgBox("The task manager do", MsgBoxStyle.YesNo, Me.Text) = MsgBoxResult.No Then
                    e.Cancel = 1
                End If
            Case CloseReason.ApplicationExitCall
                MsgBox("Out")
        End Select
    End Sub
比较简单,以前不知道,记录下来...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值