Menus et sous-menus en vb net
Bonjour,
Avant de vous explique mon problème, voici la procédure qui le génère :
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 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 |
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)
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
Code:
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 |
mais je ne sais pas l'exploiter