어떤 모듈(A 모듈 이라고 하자)에서 폼(B 폼 이라고 하자)을 호출한다고 할때
A 모듈에서 Private WithEvents Test As Form을 선언하고 Set Test=B 폼을 하면(일반 모듈에서는 WithEvents를 사용할 수 없다)
A 모듈에서 B 폼에 발생되는 모든 이벤트를 받을수 있다.
그러나 B 폼에서 사용자 정의 이벤트는 받을수 없다.
폼에서 사용자 정의 이벤트의 생성은 단순한다.
선언부에 Enent 이벤트명([인수]) 지정하고, ReaiseEvent 이벤트명을 하게되면 사용자 정의 이벤트를 발생시킨다.
이 이벤트는 Private WithEvents Test As Form로 선언하는 것이 아니라 Private WithEvents vSecurityForm As B 폼(폼명)
으로 선언되어야만 사용자 정의 이벤트를 받을수 있다.
만약 A 모듈에서 B폼을 vbModal(모달) 폼으로 호출했다면, A 모듈에서는 폼을 호출후에 실행 시점이 정지된다. 그러나 A 모듈에서는 이벤트는 받을수 있는 상태이므로 A 모듈에서 Private WithEvents vSecurityForm As B폼 으로로 선언하고,
Set vSecurityForm = B폼을 하였고, B폼에서 RaiseEvent로 사용자 정의 이벤트를 발생시키면 A 모듈에서 그 이벤트를 발생시킨다.(B폼이 종료 시점에 이벤트를 발생시켜주어, 폼의 값을 모듈에 전달하게 하는 이벤트를 발생후, 폼을 종료시키면, B폼에 있는 정보를 전달하는 것이 된다)
' 1폼 모듈(Form1)
Option Explicit
Private WithEvents FormEvent as Form
Private WithEvents UserEvent as Form2
Private Sub Form_Activate
Set FormEvent = Form2
Set UserEvent = Form2
Form2.Show vbModal
End Sub
Private Sub FormEvent_Load()
End Sub
Private Sub UseEnent_EndForm(Byval Pass1 As String)
End Sub
' 2폼 모듈(Form2)
Option Explicit
Event EndForm(Byval Pass1 As String)
Private Sub Form_Unload(Cancel As Integer)
RaiseEvent EndForm("Test")
Unload Me
End Sub
'VB6' 카테고리의 다른 글
Windows 7에서 vb6의 dateadd 에러 (0) | 2012.06.27 |
---|---|
비쥬얼베이직6에서 ieframe.dll\1 오류가 발생하는 경우 (0) | 2012.06.08 |
클래스 인터페이스 구현,Implements (0) | 2011.10.15 |
전처리기 (0) | 2011.10.14 |
시리얼 포트 에물레이터를 사용한 한 PC에서 시리얼 포트 입출력 테스트 (0) | 2011.10.10 |