2012-11-10 34 views
4

我正在为我的视觉基础课程制作游戏。我有多个图片框,单击时会单独显示隐藏图片。游戏的要点是找到匹配的图片(很简单)。如何处理多个点击事件相同Sub

在最简单的级别上,我有16个图片框。随着难度的增加,图片盒的数量会增加。

对于每一个画面中,我现在有一个事件处理程序如下(Visual Studio创建默认):

Private Sub pictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pictureBox1.Click 

里面,我打算用它来改变图片框的图像,如下:

pictureBox1.Image = (My.Resources.picture_name) 

我想知道是否有办法有一个小组处理所有的按钮点击,并改变相应的图片框,而不是有16个独立的处理程序。例如:

Private Sub pictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
    Handles pictureBox1.Click, pictureBox2.Click, pictureBox3.Click, ... pictureBox16.Click 

并执行以下操作:

' Change appropriate picture box 

这里是什么样子(现在):
enter image description here

回答

5

要找出图片框被点击,你只需要看看发件人变量。很明显,你必须把它从Object类型转换为图片框类型:

Dim ClickedBox As PictureBox 

ClickedBox = CType(sender, PictureBox) 
2

个人我会做什么将是您共同事件处理程序连接到你的图片框,给每个PictureBox的一个Tag为索引,除非你想在名字上做你的选择。然后你做这样的事情。

Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click, ... 
    Dim pb As PictureBox = CType(sender, PictureBox) 

    Select Case CInt(pb.Tag) 
     Case 0 
      pb.Image = My.Resources.PictureName1 

     Case 1 
      pb.Image = My.Resources.PictureName2 

      ... 
    End Select 
End Sub 
0

据我读过,DirectCast优于CTYPE

DirectCast可以结合 '随着/尾随着' 如下图所示:

Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click, ... 
    With DirectCast(sender, PictureBox) 
     Select Case CInt(.Tag) 
      Case 0 
       .Image = My.Resources.PictureName1 
      Case 1 
       .Image = My.Resources.PictureName2 
       ... 
     End Select 
    End With 
End Sub 

我试着以下也是,但这会导致奇怪的问题(控件消失)。

Using cbMe as CheckBox = DirectCast(sender, CheckBox) 
    cbMe.Checked = True 
End Using 
0

迭代通过例如所有的控制

For Each ctr As Control In Me.Controls 
     If TypeOf ctr Is PictureBox Then 
      If ctr Is ActiveControl Then 
       ' Do Something here 
      End If 
     End If 
    Next 
相关问题