Thumb down,
Désolé, mais j'ai l'impression d'être une personne âgé à qui on répète la même phrase en augmentant la voix pour palier à sa sourdité !

Désolé, en fait si je n'ai pas mis le code, c'est parce qu'il est assez long, sur plusieurs modules, et je ne voulais pas charger le post.
En gros, je déclare 6 ArrayList, une par CheckedListBox :
Private List1, List2, List3, List4, List5, List6 As New ArrayList
Ces ArrayList recevront les CheckedIndices de la CheckedListBox concernée dès l'évènement .ItemCheck activé.
Le traitement sur chaque CheckedListBox et sur les ArrayList est identique, donc j'ai standardisé le traitement pour ne pas multiplier le code 6 fois.
1 2 3 4 5 6 7 8 9
| Private Sub SSCLBoxCochageChange(SSCLBox As CheckedListBox, e As EventArgs) Handles CheckedListBox11.ItemCheck, CheckedListBox12.ItemCheck, CheckedListBox13.ItemCheck, CheckedListBox14.ItemCheck, CheckedListBox15.ItemCheck, CheckedListBox16.ItemCheck
'Charge la liste des éléments validés
ListClick.Clear()
ListClick.AddRange(SSCLBox.CheckedIndices)
Exit Sub
End Sub |
Chaque CheckedListBox est différente en termes de données et de volumes de données. Donc chaque ArrayList va être différent sur ce plan.
Le traitement reste le même pour toutes, seule change au final le numéro de la CheckedListBox sélectionnée.
J'ai donc créé qu'un seul évènement lié à .ItemCheck pour l'ensemble des 6 CheckedListBox.
Et en fonction du numéro de la CheckedListBox sélectionnée, je sais quel ArrayList doit être utilisé et rempli.
Je crée donc un ArrayList générique (ListCheck) que je veux lier temporairement au bon ArrayList concerné :
ListClick As New ArrayList
Et je veux traiter l'info contenu dans ce ListClick.
1 2 3 4 5 6 7 8 9 10 11
| With DirectCast(Me.Controls("CheckedListBox1" & NumFlecheClick.ToString), CheckedListBox)
'Gèle les évènements de la SSCLBox concernée pour ne pas modifier ListClick
RemoveHandler .ItemCheck, AddressOf SSCLBoxCochageChange
For Each Index As Integer In .CheckedIndices
.SetItemCheckState(Index, False)
Next
For Each Index As Integer In ListClick
.SetItemChecked(Index, True)
Next
End With |
Mon soucis, c'est que je n'ai accès au ArrayList concerné que par construction de son nom ("List" & NumFlecheClick.ToString).
Et je dois l'associer à ListCheck générique pour traitement.
Du coup, j'ai créé un dictionnaire :
Private DictionnaireList As New Dictionary(Of Integer, ArrayList)
Je l'ai rempli pour faire correspondre le numéro de la CheckedListBox sélectionnée (contenu dans NumFlecheClick) à la bonne ArrayList :
1 2 3 4 5 6 7
| 'Incrémente le dictionnaire de ArrayList
DictionnaireList.Add(1, List1)
DictionnaireList.Add(2, List2)
DictionnaireList.Add(3, List3)
DictionnaireList.Add(4, List4)
DictionnaireList.Add(5, List5)
DictionnaireList.Add(6, List6) |
Et ensuite je fais le lien :
1 2 3
| 'Pointe vers la bonne ArrayList
ListClick = Nothing
ListClick = DictionnaireList.Item(NumFlecheClick) |
Je demandais juste s'il existait une méthode plus directe ?
Peut être avec un pointage directement sur l'adresse de la bonne ArrayList ?
Ou s'il fallait passer forcement par un dictionnaire comme je l'ai fait.
Bien à toi
Partager