2013-11-25 41 views
1

我怎樣才能縮短下來(比如到一個通用的處理程序/事件等):減少我使用的「手柄」數量?

Private Sub Picturebox_Click(sender As System.Object, e As System.EventArgs) _ 
    Handles a1.Click, a2.Click, a3.Click, a4.Click, a5.Click, b1.Click, b2.Click, 
      b3.Click, b4.Click, b5.Click, c1.Click, c2.Click, c3.Click, c4.Click, 
      c5.Click, d1.Click, d2.Click, d3.Click, d4.Click, d5.Click, e1.Click, 
      e2.Click, e3.Click, e4.Click, e5.Click, f1.Click, f2.Click, f3.Click, 
      f4.Click, f5.Click, g1.Click, g2.Click, g3.Click, g4.Click, g5.Click, 
      h1.Click, h2.Click, h3.Click, h4.Click, h5.Click, i1.Click, i2.Click, 
      i3.Click, i4.Click, i5.Click, j1.Click, j2.Click, j3.Click, j4.Click, 
      j5.Click 

每那些「點擊」是50個圖片框,和我打算至少增加另外50個。

回答

3

相反的形式通過所有圖片框控件在設計控制顯式聲明的點擊事件,只是循環的,就像這樣:

For Each theControl As Control In Form1.Controls 
    If theControl.GetType Is GetType(PictureBox) Then 
     Dim thePictureBox As PictureBox = CType(theControl, PictureBox) 

     ' Route the click event of this picture box to your single handler 
     AddHandler thePictureBox.Click, AddressOf Me.thePictureBox_Click 
    End If 
Next 

現在你需要實現的實際處理程序,如下所示:

Private Sub thePictureBox_Click(sender As System.Object, e As System.EventArgs) 
    ' Cast the sender here to a picture box object 
    ' and do whatever you need to do when a picture box is clicked here 
End Sub 
+0

非常感謝,這個工作的,很容易修改和調整使用列表中使用。 –

+0

在「theControl」上放置一個斷點,使用快速監視並查找可用於編寫排除邏輯的屬性。 – granadaCoder

+1

@WallaceBreen - 很棒,很高興幫助,當你可以的時候隨時投票回答。 :-) –

1

那麼,您可以在一個包含所有需要的圖像的循環中將事件處理函數設置爲像這樣的圖像列表。

AddHandler b2.Click, AddressOf Picturebox_Click 
1

雖然卡爾是正確的,但他的每個循環都不會在您的表單上放置的容器中找到任何圖片框。

試試下面這應該和你當然可以擴展邏輯適用於其他控件:

Dim ctrl As Control = Me 

    Do 
     ctrl = GetNextControl(ctrl, True) 

     If ctrl IsNot Nothing Then _ 

      Select Case ctrl.GetType.ToString 
       Case "System.Windows.Forms.PictureBox" 
        AddHandler ctrl.click, AddressOf myCustomButtonClick 
       Case Else 
        Exit Select 
      End Select 
     End If 
    Loop Until ctrl Is Nothing