Bonjour,
Avant de vous explique mon problème, voici la procédure qui le génère :
fileMenus est un fichier texte qui contient les éléments du menu écrits sous la forme xx|titre (xx étant le tag de l'élément qui permet de savoir à quel parent le raccrocher)
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
36
37
38
39
40
41
42
43
44
45
46
47
48 Sub createMenu(ByVal fileMenus As String) Dim menuPpal As New MenuStrip Dim EltMenus() As ToolStripMenuItem Dim cNum As New List(Of Integer) Dim cTag As New List(Of String) Dim lignes() As String = File.ReadAllLines(fileMenus) Dim myarray() As String Dim numElt As Integer = 0 *** Dim EltMenu1, EltMenu2, EltMenu3, EltMenu11, EltMenu21, EltMenu31, EltMenu111, EltMenu1111 As New ToolStripMenuItem *** EltMenus = {EltMenu1, EltMenu2, EltMenu3, EltMenu11, EltMenu21, EltMenu31, EltMenu111, EltMenu1111} For Each elt In lignes myarray = Split(elt, "|") Dim tagElt As String = myarray(0) Dim titreElt As String = myarray(1) Dim nivElt As Integer = tagElt.Length Dim myItem As ToolStripMenuItem = EltMenus(numElt) cNum.Add(numElt) cTag.Add(tagElt) Select Case nivElt Case 1 With myItem .Text = titreElt .Tag = tagElt End With menuPpal.Items.Add(myItem) Case Else With myItem .Text = titreElt .Tag = tagElt Dim tagParent As Integer Dim idxParent As Integer tagParent = tagElt.Substring(0, nivElt - 1) For Each num In cNum If cTag.ElementAt(num) = tagParent Then idxParent = num : Exit For Next EltMenus(idxParent).DropDownItems.Add(myItem) End With End Select numElt += 1 Next Me.Controls.Add(menuPpal) End Sub
exemples : 11 sera raccroché à l'élément 1, 324 sera raccroché à l'élément 32...etc...
Ce bout de code marche parfaitement quelque soit le nombre de lignes du fichier MAIS le problème ce sont les deux lignes que j'ai marquées *** (les *** ne sont pas dans le vrai code bien sur)
Elles sont là pour dimensionner et déterminer les éléments du menu pour le code. Il y en a donc autant que de lignes dans le fichier.
Avec le petit fichier exemple ce n'est pas un problème mais avec le vrai fichier qui a 111 lignes...
Mon problème est donc de faire en sorte que ces deux lignes ne doivent pas se faire "en dur" et que cette procédure fonctionne quelque soit le fichier.
Il doit être possible je pense de refondre entièrement cette procédure en utilisant les structures ou les classes mais je ne suis pas du tout à l'aise avec çà...
Je vous remercie d'avance pour votre aide.
P.S : J'ai essayé avec un bout de code du style
mais je ne sais pas l'exploiter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim menuitems As New List(Of MenuItem) For i As Integer = 0 To nLignesFichier-1 Dim elt As New MenuItem elt.Text = "eltMenu" & Trim(Str(i)) menuItems.Add(m) Next
Partager