1

私はこのフォーラムや他のサイトで数え切れないほどのサンプルを検索して見ましたが、それでもこの問題に悩まされています。動的に作成されたPictureBoxのクリックハンドラーを追加し、引数をパスして、どの画像ボックスがクリックされたかを確認します)。

これが私の現在のコードです:

Public Class frmMbarimAbonimi

Private Sub frmMbarimAbonimi_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'FitnessdbDataSet.clients' table. You can move, or remove it, as needed.
    'Me.ClientsTableAdapter.Fill(Me.FitnessdbDataSet.clients)

    '===============
    Dim dt As DataTable = PaPaguar()
    Dim i As Integer = 0

    Dim gr(dt.Rows.Count) As GroupBox
    Dim pp(dt.Rows.Count) As PictureBox
    Dim lb(dt.Rows.Count) As Label


    For Each row As DataRow In dt.Rows

        gr(i) = New GroupBox
        gr(i).Width = 200
        gr(i).Height = 180

        pp(i) = New PictureBox
        pp(i).SizeMode = PictureBoxSizeMode.StretchImage

        lb(i) = New Label



        '-------------------------
        Try
            Using str As Stream = File.OpenRead("C:\Fotot\" + dt.Rows(i).Item("Foto"))
                pp(i).Image = Image.FromStream(str)
            End Using

            lb(i).Text = dt.Rows(i).Item("Emer")

        Catch ex As Exception

            MsgBox("Fotoja nuk mund te ngarkohet, ju lutem realizoheni nje foto tjeter!!!")

        End Try
        '-------------------------
        pp(i).Visible = True
        pp(i).Width = 200
        pp(i).Height = 150

        AddHandler pp(i).Click, AddressOf testini



        gr(i).Controls.Add(pp(i))

        lb(i).Visible = True
        lb(i).Width = 200
        lb(i).Height = 30
        lb(i).Left = pp(i).Left
        lb(i).Top = pp(i).Top + 150
        lb(i).BackColor = Color.WhiteSmoke
        lb(i).BringToFront()
        gr(i).Controls.Add(lb(i))

        flpanel.Controls.Add(gr(i))

        i = i + 1
    Next row
End Sub 
End Class

だから私はAddHandlerpp(i).Click、AddressOf testiniを使おうとしていましたが、明らかにこれでは、クリックされた画像ボックスを識別するためのパラメーターを使用して「testini」を呼び出すことはできません。

誰かが私を正しい方向に向けたり、アドバイスをしたりできますか?大変感謝しております。

4

1 に答える 1

3

「パラメータ」を追加してクリックイベントハンドラの署名を変更することはできないため、作成したPictureBoxに何かを追加して、イベントハンドラでそれらを識別する必要があります。

たとえば、Nameプロパティを設定できます

pp(i) = New GroupBox
pp(i).Name = "PictureBox" + i.ToString

次に、イベントハンドラーで、送信者オブジェクトを画像ボックスにキャストし、Nameプロパティを取得する画像ボックスを認識できます。
送信者は常にイベントをトリガーするコントロールであることを忘れないでください。あなたの場合、常にあなたの動的に作成されたPictureBoxの1つです

Private Sub testini(sender As Object, e As System.EventArgs) 
     Dim pb As PictureBox = DirectCast(sender, PictureBox)
     Dim pbIdentity As String = pb.Name
     .....
End Sub
于 2012-11-28T21:04:41.350 に答える