簡體   English   中英

如何使用相同的Sub處理多個單擊事件

[英]How to handle multiple click events with same 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)

我想知道是否有辦法讓一個Sub處理所有按鈕單擊,並更改相應的圖片框,而不是有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

這是它的樣子(現在):
在此輸入圖像描述

要找出單擊了哪個PictureBox,您只需要查看sender變量。 顯然你必須將它從Object類型轉換為PictureBox類型:

Dim ClickedBox As PictureBox

ClickedBox = CType(sender, PictureBox)

我個人會做的是將你的公共EventHandler附加到你的PictureBox,給每個PictureBox一個索引的標簽 ,除非你想對你的名字進行選擇。 然后你做這樣的事情。

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

據我所讀,DirectCast比CType更受歡迎

DirectCast可以與'With / End With'結合使用,如下所示:

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

例如,遍歷所有控件

    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM