본문 바로가기

work/vb

Form_QueryUnload

폼이 언로드 될 때 이벤트 순서는 Form_QueryUnload, Form_Unload, Form_Terminate 순서입니다.
End문은 Unload 계열 이벤트를 타지 않습니다.
그리고 Unload 와 QueryUnload의 큰 차이점은
Unload는 종료를 취소할 것인지 종료될 때 어떤 값을 레지스트리나 파일에 저장한다던지 할 때 보통 씁니다.
QueryUnload는 조금더 구체적으로 종료를 취소할 것은 물론이고 어떤식으로 폼이 언로드 되나 체크할 때 씁니다.
예를들면 다음과 같습니다. 'Cancel = True 주석부분을 풀어주면 사용자가 폼의 x를 눌러도 프로그램은 종료가 되지 않겠죠.
이럴 때 보통 씁니다. 아래 소스에서 MsgBox가 주석과도 같으니 아래 소스를 참고하시기 바랍니다. 즐프하세요.

Private Sub Command1_Click()
    Unload Me
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) '1
    Select Case UnloadMode
        Case vbFormControlMenu
            'Cancel = True
            MsgBox "폼 우측 상단의 x를 눌러 종료함"
        Case vbFormCode
            MsgBox "Unload 폼명 등 코딩으로 종료함"
        Case vbAppWindows
            MsgBox "현재 Windows 세션 종료. 컴퓨터를 꺼서 자동으로 프로그램이 종료함"
        Case vbAppTaskManager
            MsgBox "Ctrl+Alt+Del 키를 눌러 프로그램 목록에서 폼을 종료함"
        Case vbFormMDIForm
            MsgBox "MDI 폼이 닫히므로 MDI 하위 폼을 닫음"
        Case vbFormOwner
            MsgBox "폼의 소유자가 닫히므로 폼을 닫음"
    End Select
End Sub