2017-10-12 110 views
0

我已經創建了一個PictureBoxes的二維數組,我想將一個DragDrop事件添加到數組的所有元素。如何爲程序創建的PictureBox數組創建事件處理程序?

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開始。請閱讀[問]並參加[導覽] – Plutonix

回答

1

您不能有一個子名p(x,y)_DragDrop。您需要創建簽名爲(sender As Object, e As DragEventArgs)的子版本,並使用sender來標識圖片框。

+0

因此,我必須爲每個圖片框創建一個Sub? – Cyrill

+0

我想出了這個,但它顯示錯誤:「。」預期 Private Sub p11(p11 As Object,e As System.Windows.Forms.DragEventArgs)處理p(1,1).DragDrop End Sub – Cyrill

+2

@Cyrill:不,只需爲所有圖片框創建一個事件處理程序: Private Sub PictureBoxes_DragDrop(sender As Object,e As DragEventArgs)'(注意最後沒有'Handles ...'),那麼:AddHandler p(x,y).DragDrop,AddressOf PictureBoxes_DragDrop'。 –

相關問題