自上个星期四以来,我一直在寻找我的问题的答案。在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
感谢大家的帮助,对不起我的语言,这不是我的第一语言。
答案 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。
您无法向内置事件处理程序添加参数。