右上角关闭按钮的事件编辑

前端之家收集整理的这篇文章主要介绍了右上角关闭按钮的事件编辑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

由于以前用VB6.0做过系统,编辑的时候第一个想的是unload方法,但是实际不是这样的,VB.net 中根本就没有unload方法,但是看到了frmclosing方法,接着我就写了程序:

    Private Sub Frmmain_FormClosing(ByVal sender As Object,ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        If MsgBox("你真的要退出吗?",vbOKCancel,"提示") = vbCancel Then
            e.Cancel = True
        Else
            Dim BOffwork As New BllOffwork
            Dim EOnwork As New Onwork
            Dim EWorkRecord As New WorkRecord
            Dim strUserName As String = FrmLogin.strUserName

            Try
                EOnwork = BOffwork.InquireOnwork(strUserName)
                EWorkRecord.EUserName = strUserName
                EWorkRecord.EOnworkTime = EOnwork.EOnworkTime
                EWorkRecord.EOffworkTime = Now
                BOffwork.Offwork(strUserName,EWorkRecord)
                Me.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If
    End Sub

结果发现:如果选择不退出,程序要执行两遍,弹出两次“询问是否退出”的窗口,如果选择确定退出,会一直弹出“询问是否退出”窗口。调试了一下发现me.close()导致程序再次执行,但是如果删掉的话,整个程序就不能退出,以至成为死循环。

后来查了一下资料,知道了窗口的关闭有两个方法:formclosing() formclosed() 遂改动如下:

    Private Sub Frmmain_FormClosed(ByVal sender As Object,ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Dim BOffwork As New BllOffwork
        Dim EOnwork As New Onwork
        Dim EWorkRecord As New WorkRecord
        Dim strUserName As String = FrmLogin.strUserName

        Try
            EOnwork = BOffwork.InquireOnwork(strUserName)
            EWorkRecord.EUserName = strUserName
            EWorkRecord.EOnworkTime = EOnwork.EOnworkTime
            EWorkRecord.EOffworkTime = Now
            BOffwork.Offwork(strUserName,EWorkRecord)
            Me.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
  

    Private Sub Frmmain_FormClosing(ByVal sender As Object,"提示") = vbCancel Then
            e.Cancel = True
        End If
    End Sub


结果:点击确定退出时,还是会发生死循环,当然还是me.close()惹的祸,调试一遍恍然大悟,这两个方法有什么区别呢?formclosing() 是窗口的正在关闭事件,而formclosed() 却是窗口已经关闭的事件,窗口都已经关闭了还要me.close()做甚呢? 所以正确写法如下:

    Private Sub Frmmain_FormClosed(ByVal sender As Object,EWorkRecord)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
  

    Private Sub Frmmain_FormClosing(ByVal sender As Object,"提示") = vbCancel Then
            e.Cancel = True
        End If
    End Sub

猜你在找的VB相关文章