OVH Cloud OVH Cloud

Menu dymanique à partir d'un fichier XML

2 réponses
Avatar
Denis
Bonjour à tous,

Je souhaite construire un menu à partir d'un fichier XML.

Ce menu devra se construire dynamiquement en fonction des données XML

Voici un exemple de ce qui pourrait apparaitre ("Etats" étant le bouton
visible dans la barre de menu)

Etats
|
+Satistique
| +Etat 1
| +Etat 2
| +Etat 3
| +Sous Etat 1
| +Sous Etat 2
+Bilan
| +Bilan 1
| +Bilan 2
+Synthèse

Est-ce quelqu'un aurait des exemples de code et de fichier XML à me proposer
pour construire mon menu ?

Aloha, 2nis

2 réponses

Avatar
Zoury
Salut Denis ! :O)

Supposons le fichier XML suivant :
---
<?xml version="1.0" encoding="UTF-8" ?>
<Etats>
<Statistique>
<Etat1 nom="Etat 1"/>
<Etat2 nom="Etat 2"/>
<Etat3 nom="Etat 3">
<SousEtat1 nom="Sous Etat 1" />
<SousEtat2 nom="Sous Etat 2" />
</Etat3>
</Statistique>
<Bilan>
<Bilan1 nom="Bilan 1" />
<Bilan2 nom="Bilan 2" />
</Bilan>
<Synthese nom="Synthèse" />
</Etats>
---

Voici une façon de le charger dynamiquement sous forme de menu :
'***
Option Explicit On

Imports System.Xml

Public Class Form1
Inherits System.Windows.Forms.Form

' Code généré par le Concepteur Windows Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Me.Menu = CreateMainMenu("c:menu.xml", New EventHandler(AddressOf
MenuItem_Click))

End Sub

Private Function CreateMainMenu(ByVal FilePath As String, ByVal
delMenutItemClick As EventHandler) As MainMenu

Dim xd As New XmlDocument
xd.Load(FilePath)

Dim mm As New MainMenu
mm.MenuItems.Add(GetMenuItem(xd.DocumentElement, delMenutItemClick))
Return mm

End Function

Private Function GetMenuItem(ByVal xn As XmlNode, ByVal
delMenutItemClick As EventHandler) As MenuItem

' détermine le nom de l'élément
Dim sName As String
Dim xa As XmlAttribute = xn.Attributes("nom")
If (xa Is Nothing) Then
sName = xn.Name
Else
sName = xa.Value
End If

' créer l'item de menu
Dim mi As New MenuItem(sName)
' branche l'événement Click de l'item à notre déléguée
AddHandler mi.Click, delMenutItemClick

' rappelle la méthode récursivement pour créer les enfants
For Each xcn As XmlNode In xn.ChildNodes
mi.MenuItems.Add(GetMenuItem(xcn, delMenutItemClick))
Next

Return mi

End Function

Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As
System.EventArgs)

If ((Not sender Is Nothing) AndAlso (sender.GetType() Is
GetType(MenuItem))) Then
MessageBox.Show(DirectCast(sender, MenuItem).Text)
End If

End Sub

End Class
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Denis" a écrit dans le message de
news:
Bonjour à tous,

Je souhaite construire un menu à partir d'un fichier XML.

Ce menu devra se construire dynamiquement en fonction des données XML

Voici un exemple de ce qui pourrait apparaitre ("Etats" étant le bouton
visible dans la barre de menu)

Etats
|
+Satistique
| +Etat 1
| +Etat 2
| +Etat 3
| +Sous Etat 1
| +Sous Etat 2
+Bilan
| +Bilan 1
| +Bilan 2
+Synthèse

Est-ce quelqu'un aurait des exemples de code et de fichier XML à me


proposer
pour construire mon menu ?

Aloha, 2nis




Avatar
Denis
Merci pour cet exemple qui me semble parfait,
je m'en vais l'essayer

Aloha, 2nis

"Zoury" wrote:

Salut Denis ! :O)

Supposons le fichier XML suivant :
---
<?xml version="1.0" encoding="UTF-8" ?>
<Etats>
<Statistique>
<Etat1 nom="Etat 1"/>
<Etat2 nom="Etat 2"/>
<Etat3 nom="Etat 3">
<SousEtat1 nom="Sous Etat 1" />
<SousEtat2 nom="Sous Etat 2" />
</Etat3>
</Statistique>
<Bilan>
<Bilan1 nom="Bilan 1" />
<Bilan2 nom="Bilan 2" />
</Bilan>
<Synthese nom="Synthèse" />
</Etats>
---

Voici une façon de le charger dynamiquement sous forme de menu :
'***
Option Explicit On

Imports System.Xml

Public Class Form1
Inherits System.Windows.Forms.Form

' Code généré par le Concepteur Windows Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Me.Menu = CreateMainMenu("c:menu.xml", New EventHandler(AddressOf
MenuItem_Click))

End Sub

Private Function CreateMainMenu(ByVal FilePath As String, ByVal
delMenutItemClick As EventHandler) As MainMenu

Dim xd As New XmlDocument
xd.Load(FilePath)

Dim mm As New MainMenu
mm.MenuItems.Add(GetMenuItem(xd.DocumentElement, delMenutItemClick))
Return mm

End Function

Private Function GetMenuItem(ByVal xn As XmlNode, ByVal
delMenutItemClick As EventHandler) As MenuItem

' détermine le nom de l'élément
Dim sName As String
Dim xa As XmlAttribute = xn.Attributes("nom")
If (xa Is Nothing) Then
sName = xn.Name
Else
sName = xa.Value
End If

' créer l'item de menu
Dim mi As New MenuItem(sName)
' branche l'événement Click de l'item à notre déléguée
AddHandler mi.Click, delMenutItemClick

' rappelle la méthode récursivement pour créer les enfants
For Each xcn As XmlNode In xn.ChildNodes
mi.MenuItems.Add(GetMenuItem(xcn, delMenutItemClick))
Next

Return mi

End Function

Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As
System.EventArgs)

If ((Not sender Is Nothing) AndAlso (sender.GetType() Is
GetType(MenuItem))) Then
MessageBox.Show(DirectCast(sender, MenuItem).Text)
End If

End Sub

End Class
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Denis" a écrit dans le message de
news:
> Bonjour à tous,
>
> Je souhaite construire un menu à partir d'un fichier XML.
>
> Ce menu devra se construire dynamiquement en fonction des données XML
>
> Voici un exemple de ce qui pourrait apparaitre ("Etats" étant le bouton
> visible dans la barre de menu)
>
> Etats
> |
> +Satistique
> | +Etat 1
> | +Etat 2
> | +Etat 3
> | +Sous Etat 1
> | +Sous Etat 2
> +Bilan
> | +Bilan 1
> | +Bilan 2
> +Synthèse
>
> Est-ce quelqu'un aurait des exemples de code et de fichier XML à me
proposer
> pour construire mon menu ?
>
> Aloha, 2nis
>
>