Visual Basic 2008问题,向我的动态对象添加方法

时间:2013-05-08 00:51:58

标签: vb.net lambda expression addhandler addressof

自上个星期四以来,我一直在寻找我的问题的答案。在vb.net中已经回答了很多关于我完全相同问题的答案。但是,我正在使用Visual Basic 2008,这两种语言似乎有些差异对我来说很难理解。所以这是我的问题。

我需要创建几个图片框,我已经按照几个网站的推荐动态创建了它们。那部分工作正常。当我想点击它们时问题就开始了。我读得足够明白,这不是因为我创建了我创建了附加到它们的方法的对象。然后我创建了方法。仍然没有问题,除了我运行代码时,每个按钮都做同样的事情,因为它们都附加到同一个方法。我找到了一个解决方案:我需要使用方法转移一个参数告诉我点击的Picturebox,但因为我使用的地址我不能。我知道很少有网站谈论过相同的问题并使用lamda表达式解决了它。如果有人能给我我应该使用的代码,我会非常感激。

这是我的代码:

For i = 0 To 7
     'couleur is the name I give to my picturebox object and objet () is the sub in   which    I  created my object
    couleur(i) = objet()
Next

For x = 0 To 7
   ' initiasation of location, etc.
Next


   '     This is the issue !!! I do not know how to say this line into vb8
   ' I want to pass in argument  X to know on which object I have cliked on and then use a seled case to make separated command afterward.  
For x = 0 To 7
      AddHandler couleur(i).Click, Function(senderobj, args) couleur_click(x)
Next


End Sub

Sub couleur_click(ByVal i As Integer)

' select case doing seperated things depending on the x receive in argument

End Sub

感谢大家的帮助,对不起我的语言,这不是我的第一语言。

2 个答案:

答案 0 :(得分:1)

为什么不更改couleur_click以将发件人作为参数?然后,您将知道点击的来源,您可以从中找到PictureBox数组中couleur的索引:

' ...
For x = 0 To 7
      AddHandler couleur(i).Click, AddressOf couleur_click
Next
' ...

Sub couleur_click(sender As Object, e As EventArgs)
   Dim pictureBoxSource As PictureBox = sender

   ' Find the index of the source in the base collection
   Dim index = Array.IndexOf(couleur, pictureBoxSource)

    Select Case index
        ' ...
    End Select
End Sub

答案 1 :(得分:0)

设置每个PictureBox的tag属性,然后在click事件处理程序中,您可以对标记执行select case。

您无法向内置事件处理程序添加参数。