본문 바로가기
카테고리 없음

[vb.net] 동적 컨트롤 삽입 시 매소드를 생성하지 않고 익명 매소드를 이용하여 이벤트 처리하는 방법

by IT HUB 2020. 8. 26.
728x90
반응형

 

 

 

Public Class Form1
    Dim rnd As New Random
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim Parent As New PictureBox    '// 새로운 픽쳐박스 생성
        Parent.Size = New Size(Me.ClientRectangle.Width, Me.ClientRectangle.Height) '// 폼 내부사이즈만큼
        Parent.Location = New Point(0, 0)   '// 시작위치는 0
        Parent.SizeMode = PictureBoxSizeMode.Zoom   '// 이미지 사이즈 모드 줌
        Me.Controls.Add(Parent) '// 픽쳐박스 삽입
        Dim i As Integer = rnd.Next(2, 6)   '// 랜덤 행갯수
        Dim n As Integer = rnd.Next(2, 6)   '// 랜덤 열갯수
        Dim W As Double = Parent.Width / n  '// 구역의 넓이를 열갯수만큼 나눔
        Dim H As Double = Parent.Height / i '// 구역의 높이를 행갯수만큼 나눔
        Dim P As PictureBox '// 구역에 사용할 픽쳐박스
        For x As Integer = 1 To i * n   '// 전체 구역의 수량만큼
            P = New PictureBox  '// 새로운 픽쳐박스 생성
            P.Size = New Size(W, H) '// 사이즈를 구역에 맞추어
            P.Top = ((x - 1) \ n) * H   '// 윗쪽 시작점 지정
            P.Left = ((x - 1) Mod n) * W    '// 왼쪽 시작점 지정
            P.Name = "area_" & x    '// 이름 지정
            P.Tag = x   '// 태그 설정
            '//  Color.Transparent   '// 구역을 보기 위해서 랜덤컬러적용 실제 라이브시 Transparent로 설정
            P.BackColor = Color.FromArgb(75,
                                  rnd.Next(0, 255),
                                  rnd.Next(0, 255),
                                  rnd.Next(0, 255))

            P.Parent = Parent   '// 부모객체 지정
            '// 구역이 눌리면 실행되는 익명 매소드
            AddHandler P.MouseClick, Sub(S, O)
                                         With CType(S, PictureBox)
                                             .BackColor = Color.FromArgb(75,
                                                      rnd.Next(0, 255),
                                                      rnd.Next(0, 255),
                                                      rnd.Next(0, 255))
                                             MsgBox(String.Concat(.Tag, "번째 ", .Name.Split("_"c).First, "클릭"))
                                         End With
                                     End Sub

            Parent.Controls.Add(P)  '// 컨트롤 삽입
        Next
        Parent.Load("https://i.ytimg.com/vi/67qJHS9u0dM/maxresdefault.jpg") '// 이미지 로드
    End Sub
End Class
반응형


댓글