0

カスタムクラスは初めてです。「ゲーム」というクラスがあります。このクラスには、「pBox」と呼ばれるダイナミック ピクチャ ボックスを作成する「addGame()」というメソッドがあります。コントロールを作成した後、次のようにしてクリック イベントを登録します。

AddHandler pBox.Click, AddressOf Me.launchGame

そして、ここに launchGame があります:

Public Sub launchGame()
    MsgBox(Me.name)
End Sub

問題は、"Me.name" が、私がクリックした名前ではなく、常に最後に追加されたインスタンス名であることです。


提案に基づいて、私もこれを試しました:

Public Sub launchGame(ByVal sender As Object)
    MsgBox(sender.name)
End Sub

しかし今、「AddHandler pBox.Click, AddressOf Me.launchGame」と言う

メソッド 'Public Sub launchGame(sender As Object)' には、デリゲート 'Delegate Sub EventHandler(sender As Object, e As System.EventArgs)' と互換性のある署名がありません

そして、「AddHandler pBox.Click, AddressOf Me.launchGame(Me)」と言う

AddressOf オペランドは、括弧のないメソッドの名前でなければなりません


Public Sub launchGame(ByVal sender As Object, ByVal sender as EventArgs)
    MsgBox(sender.name)
End Sub

エラーはありませんが、msgBox は空白です。

4

1 に答える 1

0

問題は、pBox が常に最新の pictureBox コントロールだったことだと思います。Visual Basic .NET および Visual C# .NET (MSDN)でのコントロール配列の作成に基づいて、コントロール配列を作成しました。

ここで、pBoxArray クラスの AddNewpBox() メソッドで AddHandler を実行します。David Brunow の提案に従って、「ゲーム」クラスを処理するリストも作成しました。次に、pictureBox の「Tag」プロパティを「games」配列内のゲームのインデックスに設定します。

これで、私のクリック ハンドラーは次のようになり、うまく機能しているようです。

Public Sub pBoxClick(ByVal sender As Object, e As EventArgs)
    MsgBox(games(sender.tag).name)
End Sub
于 2012-11-30T16:08:53.577 に答える