Kaamet
Messages postés2Date d'inscriptiondimanche 4 juillet 2010StatutMembreDernière intervention 7 juillet 2010
-
5 juil. 2010 à 20:35
Kaamet
Messages postés2Date d'inscriptiondimanche 4 juillet 2010StatutMembreDernière intervention 7 juillet 2010
-
7 juil. 2010 à 19:22
Bonjour à tous,
Je vous explique mon problème :
J'ai un xml sous la forme :
<?xml version="1.0"?>
<Configure>
<Menu Value="Menu1">
<SousMenu Value="Sous menu 1" />
<SousMenu Value="Sous menu 2" />
<SousMenu Value="Sous menu 3" />
</Menu>
<Menu Value="Menu2">
<SousMenu Value="Sous menu 1">
<SousMenu Value="Sous menu 1" />
</SousMenu>
</Menu>
<Menu Value="Menu3">
<SousMenu Value="Sous menu 1" />
</Menu>
</Configure>
A partir de ça, je voudrais créer une arborescence de toolStripMenu.
J'arrive bien à créer les éléments <Menu> mais je n'arrive pas à ajouter les <sousMenu> dans mes menus.
Auriez-vous une idée?
Voici le code que j'utilise :
Public Sub loadXMLMenu(ByVal menu As MenuStrip)
Dim xmlDoc As New Xml.XmlDocument
Dim xmlNode As Xml.XmlNode
Dim parentItem As ToolStripMenuItem
If menu Is Nothing Then
Throw New ArgumentNullException("MENU")
End If
Try
xmlDoc.Load("c:\test.xml")
Catch ex As Exception
End Try
For Each xmlNode In xmlDoc.DocumentElement.ChildNodes
Try
parentItem = New ToolStripMenuItem
parentItem.Text = xmlNode.Attributes(0).Value
menu.Items.Add(parentItem.Text, Nothing, New System.EventHandler(AddressOf menu_click))
Try
colPath.Add(xmlNode.Attributes(1).Value, xmlNode.Attributes(0).Value) 'Ajout dans une collection
Catch ex As Exception
End Try
If xmlNode.ChildNodes.Count > 0 Then
addChildNodeMenu(menu, xmlNode, parentItem)
End If
Catch ex As Exception
End Try
Next
menu.Refresh()
End Sub
Public Sub addChildNodeMenu(ByVal menu As MenuStrip, ByVal xmlNode As Xml.XmlNode, ByVal parentItem As ToolStripMenuItem)
Dim childXMLNode As Xml.XmlNode
Dim childItem As ToolStripMenuItem
For Each childXMLNode In xmlNode.ChildNodes
Try
childItem = New ToolStripMenuItem
childItem.Text = childXMLNode.Attributes(0).Value
parentItem.DropDownItems.Add(childItem.Text, Nothing, New System.EventHandler(AddressOf menu_click))
Try
colPath.Add(childXMLNode.Attributes(1).Value, childXMLNode.Attributes(0).Value)
Catch ex As Exception
End Try
If childXMLNode.ChildNodes.Count > 0 Then
addChildNodeMenu(menu, childXMLNode, childItem)
End If
Catch ex As Exception
End Try
Next
End Sub
Merci de vos réponses :).
------------------------------------------------------------------------
Je parle moins maintenant. Je terrasse plus mes ennemis par l'éloquence. Plus je vieillis, plus je ferme ma gueule. Aujourd'hui ce qu'il me faudrait, c'est le médaillon d'Harpocrate, avec le doigt sur la bouche...
et c'est lors de la création d'une nouvelle instance d'objet ToolStripMenuItem, qu'on lui donne son nom, lui attribut une image éventuellement et qu'on l'abonne à un événement comme suit :
Public Sub loadXMLMenu(ByVal menu As MenuStrip)
Dim xmlDoc As New Xml.XmlDocument
Dim xmlNode As Xml.XmlNode
Dim parentItem As ToolStripMenuItem
If menu Is Nothing Then
Throw New ArgumentNullException("MENU")
End If
Try
xmlDoc.Load("c:\test.xml")
Catch ex As Exception
End Try
For Each xmlNode In xmlDoc.DocumentElement.ChildNodes
Try
parentItem = New ToolStripMenuItem(xmlNode.Attributes(0).Value, Nothing, New EventHandler(AddressOf menu_Click))
menu.Items.Add(parentItem)
Try
colPath.Add(xmlNode.Attributes(1).Value, xmlNode.Attributes(0).Value) 'Ajout dans une collection
Catch ex As Exception
End Try
If xmlNode.ChildNodes.Count > 0 Then
addChildNodeMenu(menu, xmlNode, parentItem)
End If
Catch ex As Exception
End Try
Next
'menu.Refresh()
End Sub
Public Sub addChildNodeMenu(ByVal menu As MenuStrip, ByVal xmlNode As Xml.XmlNode, ByVal parentItem As ToolStripMenuItem)
Dim childXMLNode As Xml.XmlNode
Dim childItem As ToolStripMenuItem
For Each childXMLNode In xmlNode.ChildNodes
Try
childItem = New ToolStripMenuItem(xmlNode.Attributes(0).Value, Nothing, New EventHandler(AddressOf menu_Click))
parentItem.DropDownItems.Add(childItem)
Try
colPath.Add(childXMLNode.Attributes(1).Value, childXMLNode.Attributes(0).Value)
Catch ex As Exception
End Try
If childXMLNode.ChildNodes.Count > 0 Then
addChildNodeMenu(menu, childXMLNode, childItem)
End If
Catch ex As Exception
End Try
Next
End Sub
Kaamet
Messages postés2Date d'inscriptiondimanche 4 juillet 2010StatutMembreDernière intervention 7 juillet 2010 7 juil. 2010 à 19:22
Je vous remercie beaucoup, la deuxième solution fonctionne parfaitement .
Voici le code qui fonctionne :
Public Sub loadXMLMenu(ByVal menu As MenuStrip)
Dim xmlDoc As New Xml.XmlDocument
Dim xmlNode As Xml.XmlNode
Dim parentItem As ToolStripMenuItem
If menu Is Nothing Then
Throw New ArgumentNullException("MENU")
End If
Try
xmlDoc.Load("c:\test.xml")
Catch ex As Exception
End Try
For Each xmlNode In xmlDoc.DocumentElement.ChildNodes
Try
parentItem = New ToolStripMenuItem(xmlNode.Attributes(0).Value, Nothing, New EventHandler(AddressOf menu_Click))
menu.Items.Add(parentItem)
Try
colPath.Add(xmlNode.Attributes(1).Value, xmlNode.Attributes(0).Value) 'Ajout dans une collection
Catch ex As Exception
End Try
If xmlNode.ChildNodes.Count > 0 Then
addChildNodeMenu(menu, xmlNode, parentItem)
End If
Catch ex As Exception
End Try
Next
'menu.Refresh()
End Sub
Public Sub addChildNodeMenu(ByVal menu As MenuStrip, ByVal xmlNode As Xml.XmlNode, ByVal parentItem As ToolStripMenuItem)
Dim childXMLNode As Xml.XmlNode
Dim childItem As ToolStripMenuItem
For Each childXMLNode In xmlNode.ChildNodes
Try
childItem = New ToolStripMenuItem(childXMLNode.Attributes(0).Value, Nothing, New EventHandler(AddressOf menu_click))
parentItem.DropDownItems.Add(childItem)
Try
colPath.Add(childXMLNode.Attributes(1).Value, childXMLNode.Attributes(0).Value)
Catch ex As Exception
End Try
If childXMLNode.ChildNodes.Count > 0 Then
addChildNodeMenu(menu, childXMLNode, childItem)
End If
Catch ex As Exception
End Try
Next
End Sub
Je parle moins maintenant. Je terrasse plus mes ennemis par l'éloquence. Plus je vieillis, plus je ferme ma gueule. Aujourd'hui ce qu'il me faudrait, c'est le médaillon d'Harpocrate, avec le doigt sur la bouche...