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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| Imports System.IO
Imports System.Xml.Serialization
Public Class Form1
Dim MenuXML As String = "Menu.xml"
Dim MenuAdminXML As String = "MenuAdmin.xml"
Dim groupesAdmin As Groupes = Deserialize(MenuAdminXML)
Dim groupesAuth As Groupes = Deserialize(MenuXML)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Remplir Treeview
FillTreeViewFromGroupe(groupesAdmin.groupes.First)
'Remplir Combobox
ComboBoxProfile.DataSource = groupesAuth.groupes
ComboBoxProfile.DisplayMember = "Name"
ComboBoxProfile.ValueMember = "Name"
End Sub
Private Sub ComboBoxProfile_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxProfile.SelectedIndexChanged
CheckTreeViewFromGroupe(ComboBoxProfile.SelectedItem)
End Sub
Private Sub ButtonValidate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonValidate.Click
Dim groupe As Groupe = FillGroupeFromTreeView()
Dim groupes As New Groupes
For Each g As Groupe In groupesAuth.groupes
If g.Name <> groupe.Name Then
groupes.groupes.Add(g)
Else
groupes.groupes.Add(groupe)
End If
Next
Serialize(groupes, MenuXML)
End Sub
'Chargement des groupes d'un fichier xml
Private Function Deserialize(ByVal filename As String) As Groupes
Deserialize = Nothing
Try
Dim objStreamReader As New StreamReader(filename)
Try
Dim p2 As New Groupes
Dim x As New XmlSerializer(GetType(Groupes))
Return x.Deserialize(objStreamReader)
Catch ex As Exception
MsgBox("Chargement non effectué.")
Finally
objStreamReader.Close()
End Try
Catch ex As Exception
MsgBox("Fichier introuvable.")
End Try
End Function
'Sauvegarde des groupes dans un fichier xml
Private Sub Serialize(ByVal groupes As Groupes, ByVal filename As String)
Try
Dim objStreamWriter As New StreamWriter(filename)
Try
Dim x As New XmlSerializer(GetType(Groupes))
x.Serialize(objStreamWriter, groupes)
Catch ex As Exception
MsgBox("Sauvegarde non effectuée.")
Finally
objStreamWriter.Close()
End Try
Catch ex As Exception
MsgBox("Fichier introuvable.")
End Try
End Sub
'Extrait le groupe affiché dans la Treeview
Private Function FillGroupeFromTreeView() As Groupe
Dim groupe = New Groupe
groupe.Name = ComboBoxProfile.SelectedValue
For Each n As TreeNode In TreeViewMenus.Nodes
Dim m As New Menu(n.Text, n.Tag)
If n.Checked Then groupe.Menus.Add(m)
For Each n2 As TreeNode In n.Nodes
If n2.Checked Then m.SousMenus.Add(New SousMenu(n2.Text, n2.Tag))
Next
Next
FillGroupeFromTreeView = groupe
End Function
'Remplit la Treeview à partir d'un groupe
Private Sub FillTreeViewFromGroupe(ByVal groupe As Groupe)
TreeViewMenus.Nodes.Clear()
For Each m As Menu In groupe.Menus
Dim n As New TreeNode(m.Name)
n.Tag = m.Form
TreeViewMenus.Nodes.Add(n)
n.Checked = False
For Each sm As SousMenu In m.SousMenus
Dim n2 As New TreeNode(sm.Name)
n2.Tag = sm.Form
n.Nodes.Add(n2)
n2.Checked = False
Next
Next
End Sub
'Cocher les noeuds du Treeview à partir d'un groupe
Private Sub CheckTreeViewFromGroupe(ByVal groupe As Groupe)
For Each mNode As TreeNode In TreeViewMenus.Nodes
Dim mName As String = mNode.Text
If groupe.Menus.Find(Function(value As Menu) value.Name = mName) IsNot Nothing Then
'Menu présent
Dim m As Menu = groupe.Menus.Find(Function(value As Menu) value.Name = mName)
mNode.Checked = True
For Each smnode As TreeNode In mNode.Nodes
Dim smName As String = smnode.Text
smnode.Checked = m.SousMenus.Find(Function(value As SousMenu) value.Name = smName) IsNot Nothing
Next
Else
'Menu absent
mNode.Checked = False
For Each smnode As TreeNode In mNode.Nodes
smnode.Checked = False
Next
End If
Next
End Sub
End Class |
Partager