2012-11-10 60 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 
相關問題