减少我使用的“手柄”数量?

时间:2013-11-25 19:56:10

标签: vb.net winforms event-handling

如何缩短它(比如一个通用的处理程序/事件等):

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 个答案:

答案 0 :(得分:3)

不是在设计器中的控件上显式声明click事件,而是循环遍历表单中的所有图片框控件,如下所示:

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

答案 1 :(得分:1)

好吧,你可以在一个包含你需要的所有图像的循环中将事件处理程序分配给这样的图像列表。

AddHandler b2.Click, AddressOf Picturebox_Click

答案 2 :(得分: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