▣ 동적 컨트롤 생성 및 이벤트 처리 방법
 다음처럼 Form에서 Controls.Add() 함수를 이용해서 컨트롤을 생성하고, WithEvents로 선언한 참조 변수를 이용하면 동적으로 생성된 컨트롤에 대한 이벤트를 처리할 수 있다.

Private WithEvents cmdDynamicButton        As VB.CommandButton

Private Sub cmdDynamicButton_Click()

    MsgBox "Click"

End Sub

Private Sub CmdMakeControl_Click()

    Dim obj     As Object
   
    Set obj = Me.Controls.Add("VB.CommandButton", "Command1")
    obj.Move 300, 300, 1200, 450
    obj.Caption = "Command1"
    obj.Visible = True
   
    Set cmdDynamicButton = obj
   
    Set obj = Nothing

End Sub



▣ WithEvents 문에서는 배열을 선언할 수 없다.
일반적인 변수 선언과 달리 WithEvents 변수에는 몇 가지 제한 사항이 있다. (MSDN 설명)

  • WithEvents 변수는 포괄적 개체 변수가 될 수 없습니다. 즉, As Object로 선언할 수 없고 변수를 선언할 때 클래스 이름을 지정해야 합니다.
  • WithEvents 변수를 As New로 선언할 수 없습니다. 이벤트 원본 개체는 명시적으로 작성되고 WithEvents 변수에 할당되어야 합니다.
  • 표준 모듈에서 WithEvents 변수를 선언할 수 없습니다. 클래스 모듈, 폼 모듈, 클래스를 정의하는 기타 모듈 등에서만 선언할 수 있습니다.
  • WithEvents 변수의 배열을 작성할 수 없습니다.

이러한 이유로 인해 동적으로 생성하는 컨트롤이 많아 지는 경우, 이에 대한 이벤트 처리시 각각의 WithEvents 변수를 선언해야하는 불편함이 있다.


▣ WithEvents 변수에서 배열을 사용 할 수 없는 문제를 우회 하는 방법
글 재주가 부족한 관계로... 간단히 예제 코드로 대신.

사용자 삽입 이미지





☞ 본문 출처 : http://www.enjoydev.com/blog/110(새 창으로 열기)

☞ 본인의 글 입니다. 이 글을 다른 곳에 게재하는 경우 본문 출처를 밝혀주시기 바랍니다.

☞ 위 내용은 정식 문서 번역이 아닌, 실무 적용에 따른 경험을 바탕으로 어느정도 자의적인 설명이 포함되어있습니다.
   잘못된 내용이 있는 경우 지적 바랍니다.

2007/03/30 14:24 2007/03/30 14:24

트랙백 주소 :: http://www.enjoydev.com/blog/trackback/110

댓글을 달아 주세요

  1. 오지환 2009/07/23 17:49  댓글주소  수정/삭제  댓글쓰기

    제가 잘 모르는 부분이라 정말 유용하네요.
    한가지 더 궁금한게 있는데요.. 폼에 추가하는 방법에에 Frame을 새로 만들면서 프레임 내부에 여러 가지 control을 동적으로 만들 수는 없나요.

    예를 들자면 현재 작성한는 방명록을 Frame으로 묶어서 하나를 만들어 Frame 내부에는 Label도 있고, Textbox도 있고, ChechkBox도
    있는 Frame을 추가 할때마다 작성할때 추가 되어 생성 되도록 할 수 있는 방법이요....