Bonjour à tous!
Et merci d'avance à ceux qui pourront m'aider!
Comme l'indique mon intitulé, je travaille actuellement sur une liste de liste de type structuré.
Voici mon code (parfois mieux vaut l'exemple qu'un long discours) :
- Tout d'abord, la structure servant à la liste de listes comportant ce type structuré EN ENTRÉE :
-Voici la structure servant à la liste de liste de type structurée EN SORTIE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 'structure permettant la récupération des éléments d'impression de la table étiquette Public Structure LabelPrintingElement Public etiq_num As String Public etiq_dateheure As Date End Structure
Pourquoi ce changement de type en cours de route? Tout simplement car j'ai créé une classe permettant d'utiliser n'importe quel type d'informations avec ce formalisme afin de produire des étiquettes industrielles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 'structure permettant la récupération des éléments loftware Public Structure ElementsEtiquetteLWL Public LibelleElementLWL As String Public ValeurElementLWL As String End Structure
Voici le code en question (C'est une fonction "rustine" qui fait le lien entre 2 classes ayant leur propre méthode, et c'est pour moi la manière la plus propre de m'en sortir et également celle qui me prendrait normalement le moins de temps... puisque je dois finaliser le tout pour vendredi) :
Le ListeUnElemParEtiq.Clear() est "obligatoire" car sinon je vais "concaténer" (désolé pour l'abus de langage) les même éléments à chaque fois que je vais boucler (je suis censé avoir forcément 2 branches et X troncs).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Function conversion_ListofLabels_en_ListeElemParEtiq(ByVal ListofLabels As List(Of data_access.LabelPrintingElement)) _ As List(Of List(Of loftware_access.ElementsEtiquetteLWL)) 'Déclaration des variables Dim ListeElemsParEtiq As New List(Of List(Of loftware_access.ElementsEtiquetteLWL)) Dim ListeUnElemParEtiq As New List(Of loftware_access.ElementsEtiquetteLWL) Dim ElementsEtiquetteLWL As loftware_access.ElementsEtiquetteLWL 'Exécution For i As Integer = 0 To ListofLabels.Count - 1 ElementsEtiquetteLWL.LibelleElementLWL = "etiq_num" ElementsEtiquetteLWL.ValeurElementLWL = ListofLabels.Item(i).etiq_num 'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée) ListeUnElemParEtiq.Add(ElementsEtiquetteLWL) ElementsEtiquetteLWL.LibelleElementLWL = "etiq_dateheure" ElementsEtiquetteLWL.ValeurElementLWL = Format(ListofLabels.Item(i).etiq_dateheure, "dd/MM/yyyy") 'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée) ListeUnElemParEtiq.Add(ElementsEtiquetteLWL) '---------------------------------------------------------- 'on ajoute le tout dans la liste de liste ListeElemsParEtiq '---------------------------------------------------------- ListeElemsParEtiq.Add(ListeUnElemParEtiq) 'on nettoie les valeurs précédemment passées dans ListeUnElemParEtiq.Clear ' afin que cela ne produise pas un comportement anormal dans ListeElemsParEtiq ListeUnElemParEtiq.Clear() Next ' ListeElemParEtiq.Add(ListeUnElemParEtiq) Return ListeElemsParEtiq End Function
SAUF QUE lorsque j'efface ListeUnElemParEtiq avec ListeUnElemParEtiq.Clear(), cela impacte également l'ensemble des élements déja présents dans ListeElemsParEtiq qui est une liste composée de ListeUnElemParEtiq.
J'avais pensé également à une variable du même type que ListeUnElemParEtiq qui jouerait le rôle d'intermédiaire entre ListeUnElemParEtiq et ListeElemsParEtiq, sauf que cela ne marche pas non plus : J'en conclus donc que tout se fait en mémoire (à la manière de variables pointées)...
Peut-être existe-t'il une manière plus simple d'allouer les valeurs sans passer par des étapes intermédiaires ou une astuce... Enfin je vous laisse libre de tout choix technique tant que je garde les mêmes entrées/sorties.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
34
35 Function conversion_ListofLabels_en_ListeElemParEtiq(ByVal ListofLabels As List(Of data_access.LabelPrintingElement)) _ As List(Of List(Of loftware_access.ElementsEtiquetteLWL)) 'Déclaration des variables Dim ListeElemsParEtiq As New List(Of List(Of loftware_access.ElementsEtiquetteLWL)) Dim ListeUnElemParEtiq As New List(Of loftware_access.ElementsEtiquetteLWL) Dim ListeTemp As New List(Of loftware_access.ElementsEtiquetteLWL) Dim ElementsEtiquetteLWL As loftware_access.ElementsEtiquetteLWL 'Exécution For i As Integer = 0 To ListofLabels.Count - 1 ElementsEtiquetteLWL.LibelleElementLWL = "etiq_num" ElementsEtiquetteLWL.ValeurElementLWL = ListofLabels.Item(i).etiq_num 'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée) ListeUnElemParEtiq.Add(ElementsEtiquetteLWL) ElementsEtiquetteLWL.LibelleElementLWL = "etiq_dateheure" ElementsEtiquetteLWL.ValeurElementLWL = Format(ListofLabels.Item(i).etiq_dateheure, "dd/MM/yyyy") 'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée) ListeUnElemParEtiq.Add(ElementsEtiquetteLWL) '---------------------------------------------------------- 'on ajoute le tout dans la liste de liste ListeElemsParEtiq '---------------------------------------------------------- ListeTemp = ListeUnElemParEtiq ListeElemsParEtiq.Add(ListeTemp) 'on nettoie les valeurs précédemment passées dans ListeUnElemParEtiq.Clear ' afin que cela ne produise pas un comportement anormal dans ListeElemsParEtiq ListeUnElemParEtiq.Clear() Next ' ListeElemParEtiq.Add(ListeUnElemParEtiq) Return ListeElemsParEtiq End Function
Merci de vous êtes accroché(e)s jusqu'au bout!
Partager