AddHandler avec Handler qui prend ses arguments lors d'une boucle
Bonjour à tous,
Je suis débutant en VB.NET et je rencontre actuellement un problème lors de l'attribution d'EventHandlers à des contrôles crées dynamiquement.
En résumé à chaque création d'une nouvelle DropDownItem dans le menu de mon application, je veux lui attribuer l'exécution d'une Sub qui prend des arguments dépendant de la DropDownItem cliquée.
Par exemple si je clique sur "Calculateur n°1", une fenêtre aux caractéristiques du calculateur n°1 doit être crée pas la Sub. Ainsi de suite avec "Calculateur n°2" etc...
Voici le bout code en question:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| For i As Integer = 0 To NumberOfECU - 1
Dim j As Integer
j = i
TCFMonitoringTool.CalculateursToolStripMenuItem.DropDownItems.Add(menuArray(i, 2)) 'Création dynamique du menu des Calculateurs
AddHandler TCFMonitoringTool.CalculateursToolStripMenuItem.DropDownItems.Item(i).Click, Sub(senderObj, args) _
beforeCreateECU(TCFMonitoringTool.CalculateursToolStripMenuItem.DropDownItems.Item(j), j)
Next
Sub beforeCreateECU(ByVal menuItem As ToolStripItem, ByVal ECUline As Integer)
Dim i As Integer = 0
Dim ECUCreated As Boolean = False
While ECUCreated = False
If IsNothing(ECU(ECUline, i)) = False AndAlso ECU(ECUline, i).Text = "" Then
createECU(ECUline, i, menuItem)
ECUCreated = True
ElseIf IsNothing(ECU(ECUline, i)) = True Then
createECU(ECUline, i, menuItem)
ECUCreated = True
Else
i = i + 1
End If
End While
End Sub |
Suite à ceci, j'ai bien les DropDownItems qui apparaissent dans le menu de l'application, avec les nom corrects, mais lorsque je clique par exemple sur celle qui s'appelle "Calculateur n°1", c'est une fenêtre à l'image de "Calculateur n°6" qui apparaît. C'est à dire le dernier calculateur de ma liste, donc la dernière itération de la boucle For.
Pourquoi les arguments envoyés à ma Sub sont systématiquement les mêmes, quel que soit la DropDownItem cliquée? Pourtant dans AddHandler je précise bien que chaque Item(i) doit avoir sa propre Sub(argument1(i), argument2(i)) associée?
Merci d'avance pour votre aide.