폼 모듈이나 다른 클래스 모듈에서, DLL에 포함된 클래스에서 생성한 폼의 텍스트 박스에 입력한 값을
DLL의 클래스를 생성한 모듈에 전달하기 위해서는 여러가지 방법이 있을수 있다.

여기서는 이벤트를 사용하는 방법을 설명하겠다.
아주 단순한 구조이다.

DLL의 클래스에 개체(인스턴스)를 생성한 모듈을 폼 모듈이라 가정하겠다.
폼 모듈에서는 withevents를 사용헤서 DLL의 클래스의 개체를 저장할 변수를 생성한다.
그러면 DLL의 클래스 개체에서 발생한 이벤트를 폼 모듈에서 처리할 수 있게 된다.
' 실행하기 전에, 클래스 프로젝트에서 Dll 파일을 한번 생성한후에, 본 프로제트의 참조에 dll 참조를 추가시켜야 한다.
Option Explicit

Private WithEvents Cls As Project2.Class1

Private Sub Cls_CloseForm(ByVal Message As String)
    MsgBox Message
    Me.Show
End Sub

Private Sub Form_Load()
    Set Cls = New Project2.Class1
    Me.Hide
End Sub

개체의 클래스가 포함된 DLL의 클래스 모듈에서는 발생시킬 이벤트를 선언하여 주고
DLL에 포함시킬 폼의 텍스트 박스에 대한 이벤트를 받기 위해서 withevents를 사용한 개체변수를 하나 생성한다.
그러면 DLL에 포함된 폼의 텍스트 박스에서 발생하는 이벤트를 클래스 모듈에서 받을수 있다.
텍스트 박스에서 이벤트가 발생하면, RaiseEvent를 사용해서 상단에 선언한 이벤트를 발생시키면
이 클래스의 개체를 생성한 모듈에서도 이벤트를 받게 된다.
Option Explicit

Public Event CloseForm(ByVal Message As String)

Private WithEvents clsTextBox As TextBox

Private Sub Class_Initialize()
    frmCls.Show
    Set clsTextBox = frmCls.Text1
End Sub

Private Sub clsTextBox_KeyDown(KeyCode As Integer, Shift As Integer)
    If Not KeyCode = vbKeyReturn Then Exit Sub
    RaiseEvent CloseForm(clsTextBox.Text)
    Set clsTextBox = Nothing
    Unload frmCls
End Sub

다음은 텍스트 박스를 올리기 위한 폼 모듈이다. 먼저 DLL에 폼 모듈을 추가시키고 폼 모듈을 추가하고 텍스트 박스 올리는것으로 끝이다. 다른 특별한 코드가 필요치 않다.
Option Explicit

Private Sub Command1_Click()
    Unload Me
End Sub

아래 이미지는 위 소스를 실행시키면 나타나는 DLL에서 생성한 폼이 나타난다. DLL 클래스의 개체를 폼한하고 있는 폼 모듈은 Hide로 해놨다.


DLL 클래스에서 생서한 폼의 텍스트 박스에 메세지를 입력한 이미지이다.

텍스트 박스에서 엔터를 치게되면 DLL 클래스에서 이벤트를 발생시키게 되고, 이를 폼 모듈에서 받게 된다.
폼 모듈에서는 이 이벤트에 대한 이벤트 프로시저에 전달된 값에 대한 메세지 박스를 표시하도록 코드 실행 이미지이다.

텍스트 박스에 입력한 메세지와, 메세지 박스에 표시된 메세지가 같음을 알수 있다. 이것은 DLL에서 이벤트 발생시 이벤트의 인수로 텍스트박스의 값을 전달하도록 코드가 되있기 때문이다, 확인 버튼을 누리면 메인 폼이 다시 보인다.

이런 방법으로 값을 전달하면 된다. 이걸 응용해서 사용하면 여러 이벤트에 대한 값을 전달해 줄 수 있다.

+ Recent posts