我是自定义类的新手。我有一个叫做“游戏”的课程。在类中,我有一个名为'addGame()'的方法,它创建一个名为'pBox'的动态图片框。创建控件后,我正在执行以下操作来注册click事件:
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是空白的。
答案 0 :(得分:0)
我认为问题在于pBox始终是最新的pictureBox控件。我基于 Creating Control Arrays in Visual Basic .NET and Visual C# .NET (MSDN)创建了一个控制数组。
现在我在pBoxArray类的AddNewpBox()方法中执行AddHandler。 我还根据David Brunow的建议创建了一个处理“游戏”类的列表。然后我将pictureBox“Tag”属性设置为“游戏”数组中游戏的索引。
所以现在我的点击处理程序如下所示,它看起来效果很好。
Public Sub pBoxClick(ByVal sender As Object, e As EventArgs)
MsgBox(games(sender.tag).name)
End Sub