2017-10-12 9 views
0

나는 PictureBoxes의 2 차원 배열을 만들었고 배열의 모든 요소에 DragDrop 이벤트를 추가하려고합니다.프로그래밍 방식으로 생성 된 PictureBox Array에 대한 이벤트 처리기는 어떻게 만듭니 까?

For x As Integer = 1 To 16 
     For y As Integer = 1 To 4 
      p(x, y) = New PictureBox() 
      p(x, y).Image = My.Resources.Kästchen 
      p(x, y).Location = New Point(pMain.Left + x * 48, pMain.Top + y * 48) 
      p(x, y).Size = New Size(48, 48) 
      p(x, y).Name = "p"+str(x)+str(y) 
      AddHandler p(x, y).DragDrop, AddressOf p(x,y)_DragDrop 

      p(x, y).Visible = True 
      Me.Controls.Add(p(x, y)) 


     Next 
    Next 

나는 비슷한 대답 here가 있다는 것을 알고 있지만 나는 배열에 적응 할 수 없습니다. 런타임 중에 생성되는 모든 PictureBox에 대해 DragDrop 이벤트를 추가하려면 어떻게합니까?

+0

컨트롤의 수가 하드 코딩되었으므로 디자이너의 폼에 컨트롤을 넣지 않는 이유는 무엇입니까? 루핑 할 배열에 여전히 참조를 저장할 수 있습니다. 귀하의 응용 프로그램이 누출 가능성이 있으며 배열 색인 0부터 시작합니다. [ask]를 읽고 [둘러보기] – Plutonix

답변

1

p(x,y)_DragDrop이라는 보조 이름을 사용할 수 없습니다. (sender As Object, e As DragEventArgs) 서명이있는 서브를 만들고 sender을 사용하여 그림 상자를 식별해야합니다.

+0

을 가져 가십시오. 각 그림 상자에 Sub를 만들어야합니까? – Cyrill

+0

이 문제를 생각해 냈지만 오류를 보여줍니다 : "." 예 : Private Sub p11 (p11 As Object, System.Windows.Forms.DragEventArgs) p (1,1)을 처리합니다 .DragDrop End Sub – Cyrill

+2

@Cyrill : 아니요, 모든 그림 상자에 대해 하나의 이벤트 처리기를 만듭니다. Private Sub PictureBoxes_DragDrop (보낸 사람 객체, e DragEventArgs)'(끝에 'Handles ...'가 없다는 것을 알리는 것), AddHandler p (x, y) .DragDrop, AddressOf PictureBoxes_DragDrop'. –