IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

XML & Menu Dynamique [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut XML & Menu Dynamique
    salut tous le monde
    merci beaucoup pour les personnes qui cherchent à aider les autres dans ce forum et sur tout le membre -N4w4k- qui m'a trop aidé dans des autres exemples ...
    je cherche le code pour faire un Menu Dynamique comme celui ci



    qui se charge a l'aide d'une fichier XML ( GroupPriority.XML) dans le code est le suivant :
    Code xml : 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
     
    <accueil>
    <GROUPE name="User" priority="3">
          <MENU name="Fournisseurs" form="frm_Fournisseurs"></MENU>
          <MENU name="Produits" form="frm_Produits">
                  <SMENU name="Liste des Produits" form="frm_liste_prod"/>
                  <SMENU name="Nouveau produit" form="frm_nouveau_prod"/>
          </MENU>
          <MENU name="Catégories" form="frm_Catégories">
                  <SMENU name="Liste des Catégories" form="liste_cat"/>
                  <SMENU name="Nouveau catégorie" form="frm_nouveau_cat"/>
          </MENU>
     
    </GROUPE>
    <GROUPE name="Stagaire" priority="1">
          <MENU name="Catégories" form="frm_Catégories">
                  <SMENU name="Liste des Catégories" form="liste_cat"/>
                  <SMENU name="Nouveau catégorie" form="frm_nouveau_cat"/>
          </MENU>
    	  <MENU name="Details commandes" form="frm_Details_commandes">
                  <SMENU name="Liste des details commandes" form="liste_DC"/>
                  <SMENU name="Nouveau detail commande" form="frm_nouveau_DC"/>
    		 </MENU>
    </GROUPE>
    </accueil>

    l'affichage du Menue Dynamique se déroule aprés un petit teste sur la "priority" de chaque groupe
    si un groupeA avec priority= 4
    groupeB avec priority= 2
    ===> le menu dynamique contient les MENU et les SMENU du groupB
    le résultat pour mon code dois etre presque comme ca

  2. #2
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Salut,

    En utilisant les mêmes classes que pour ton autre problème..
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Imports System.Xml.Serialization
     
    'Classe Groupes (balise "accueil")
    <XmlRoot("accueil")>
    Public Class Groupes
     
        <XmlElement("GROUPE")>
        Public Property groupes As New List(Of Groupe)
     
    End Class
     
    'Classe Groupe (balise "GROUPE")
    Public Class Groupe
        <XmlAttribute("name")>
        Public Property Name As String = ""
        <XmlElement("MENU")>
        Public Property Menus As New List(Of Menu)
     
        Sub New()
     
        End Sub
     
        Sub New(ByVal Name As String)
            Me.Name = Name
        End Sub
    End Class
     
    'Classe Menu (balise "MENU")
    Public Class Menu
        <XmlAttribute("name")>
        Public Property Name As String = ""
        <XmlAttribute("form")>
        Public Property Form As String = ""
        <XmlElement("SMENU")>
        Public Property SousMenus As New List(Of SousMenu)
     
        Sub New()
     
        End Sub
     
        Sub New(ByVal Name As String, ByVal Form As String)
            Me.Name = Name
            Me.Form = Form
        End Sub
    End Class
     
    'Classe SousMenu (balise "SMENU")
    Public Class SousMenu
        <XmlAttribute("name")>
        Public Property Name As String = ""
        <XmlAttribute("form")>
        Public Property Form As String = ""
     
        Sub New()
     
        End Sub
     
        Sub New(ByVal Name As String, ByVal Form As String)
            Me.Name = Name
            Me.Form = Form
        End Sub
    End Class
    .. tu peux faire comme ça:
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Public Class Form1
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            FillMenuTripByXML("Menu.xml", "Stagiaire", MenuStrip1)
        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 IO.StreamReader(filename)
                Try
                    Dim p2 As New Groupes
                    Dim x As New Xml.Serialization.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 IO.StreamWriter(filename)
                Try
                    Dim x As New Xml.Serialization.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
     
        'Remplissage du menu a partir du contenu du fichier xml
        Private Sub FillMenuTripByXML(ByVal filename As String, ByVal role As String, ByVal menuStrip As MenuStrip)
     
            Dim groupes As Groupes = Deserialize(filename)
            Dim groupe As Groupe = groupes.groupes.Find(Function(g As Groupe) g.Name = role)
     
            menuStrip.Items.Clear()
            If groupe IsNot Nothing Then
                For Each m As Menu In groupe.Menus
                    Dim item As ToolStripMenuItem = menuStrip.Items.Add(m.Name)
                    For Each sm As SousMenu In m.SousMenus
                        item.DropDownItems.Add(sm.Name)
                    Next
                Next
            End If
        End Sub
     
    End Class

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    merci beaucoup , je veux pas un menue avec MenuStrip parsequ'il doit etre dynamique selon le fichier.xml

    j'ai commencé à chercher une solution mais je me suis bloqué au deux niveau :
    1/ je c'est pas comment intégré la serialisation donc le XML ne marche pas tant que je ne supprime pas le <?xml version="1.0" encoding="utf-8"?>
    2/ il m'affiche les MENU et les SMENU du 1ér GROUPE ( je c'est pas comment comparé deux groupe selon le valeur de leur Priorité)

    svp quelque instant je met le code que jé utilisé et si possible que tu le vérifie

  4. #4
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Citation Envoyé par rabso007 Voir le message
    merci beaucoup , je veux pas un menue avec MenuStrip parsequ'il doit etre dynamique selon le fichier.xml
    C'est exactement ce que c'est. J'ai ajouté un MenuStrip vide au début qui s'appelle MenuStrip1 et je le remplit grâce aux fichier xml.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    Form1
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Public Class Form1
        Inherits System.Windows.Forms.Form
     
    #Region " Windows Form Designer generated code "
     
        Public Sub New()
            MyBase.New()
     
            'This call is required by the Windows Form Designer.
            InitializeComponent()
     
            'Add any initialization after the InitializeComponent() call
     
        End Sub
     
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
     
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(292, 273)
            Me.Name = "Form1"
            Me.Text = "Dynamic Menu"
     
        End Sub
     
    #End Region
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim objMenu As New DynamicMenu()
            objMenu.XMLMenuFile = "E:\downlods\Compressed\Code source des PFE 2011\DynamicMenu\DynamicMenu\menu.xml"
            objMenu.objForm = Me
            Me.Menu = objMenu.LoadDynamicMenu()
        End Sub
     
        Private Sub MenuItemOnClick_New(ByVal sender As Object, ByVal e As System.EventArgs)
            MessageBox.Show("New Clicked")
        End Sub
     
        Private Sub MenuItemOnClick_Paste(ByVal sender As Object, ByVal e As System.EventArgs)
            MessageBox.Show("Paste Clicked")
        End Sub
     
        Private Sub MenuItemOnClick_Test(ByVal sender As Object, ByVal e As System.EventArgs)
            MessageBox.Show("Test Clicked")
        End Sub
    End Class
    classe
    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
    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
     
    Public Class DynamicMenu
        ''''''''''''''''''''''variable declarations begins''''''''''''''''''''''''''''
        'Create a main menu object.
        Private mainMenu As New mainMenu()
        'Object for loading XML File
        Private objXML As Xml.XmlDocument
        ' Create menu item objects.
     
        Private mItem As New MenuItem()
     
        'Menu handle that should be returned
        Private objMenu As Menu
        'Path of the XML Menu Configuration File 
        Public XMLMenuFile As String
        'Form Object in which Menu has to be build
        Public objForm As Object
        ''''''''''''''''''''''variable declarations ends '''''''''''''''''''''''''''''
     
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'This method will get invoked by a parent Form.
        'And it returns Menu Object.
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Public Function LoadDynamicMenu() As MainMenu
            Dim oXmlElement As Xml.XmlElement
            Dim objNode As Xml.XmlNode
     
            objXML = New Xml.XmlDocument()
            'load the XML File
            objXML.Load(XMLMenuFile)
            'Get the documentelement of the XML file.
            oXmlElement = CType(objXML.DocumentElement, Xml.XmlElement)
            'loop through the each Top level nodes
            'For ex., File & Edit becomes Top Level nodes
            'And File -> Open , File ->Save will be treated as 
            'child for the Top Level Nodes
     
            For Each objNode In objXML.FirstChild.FirstChild.ChildNodes
     
     
                'Create a New MenuItem for Top Level Nodes
                mItem = New MenuItem()
                ' Set the caption of the menu items.
                mItem.Text = objNode.Attributes("name").Value
                ' Add the menu items to the main menu.
                mainMenu.MenuItems.Add(mItem)
                'Call this Method to generate child nodes for
                'the top level node which was added now(mItem in the above Add statement)
                GenerateMenusFromXML(objNode, mainMenu.MenuItems(mainMenu.MenuItems.Count - 1))
            Next
     
            'return this Menu handle to the parent Form so that
            'generated menu gets displayed in the Form
            Return objMenu
        End Function
     
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'This method takes care of loading Menus based on XML file contents. 
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Private Sub GenerateMenusFromXML(ByVal objNode As Xml.XmlNode, ByVal mItm As MenuItem)
            'This method will be invoked in an recursive fashion
            'till all the child nodes are generated. This method
            'drills up to N-levels to generate all the Child nodes
            Dim objNod As Xml.XmlNode
            Dim sMenu As New MenuItem()
            'loop for child nodes
            For Each objNod In objNode.ChildNodes
                sMenu = New MenuItem()
                ' Set the caption of the menu items.
                sMenu.Text = objNod.Attributes("name").Value
                mItm.MenuItems.Add(sMenu)
                'Add a Event handler to the menu item added
                'this method takes care of Binding Event Name(based on the parameter from
                'from xml file) to newly added menu item.
                'for ex., Your Form Code should have a Private sub MenuItemOnClick_New even to handle
                'the click of New Menu Item
                If Not objNod.Attributes("form") Is Nothing Then
                    FindEventsByName(sMenu, objForm, True, "MENU", objNod.Attributes("form").Value)
                End If
                'call the same method to see you have any child nodes
                'for the particular node you have added now(above mItm)
                GenerateMenusFromXML(objNod, mItm.MenuItems(mItm.MenuItems.Count - 1))
            Next
            'assign the generated mainMenu object to objMenu - public object
            'which is to be used in the Main Form
            objMenu = mainMenu
        End Sub
     
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'objective of this method is to find out the private event present in Form 
        'and attach the newly added menuitem to this event, this was achieved using
        'Reflection technique
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Private Sub FindEventsByName(ByVal sender As Object, _
         ByVal receiver As Object, ByVal bind As Boolean, _
         ByVal handlerPrefix As String, ByVal handlerSufix As String)
            ' Get the sender's public events.
            Dim SenderEvents() As System.Reflection.EventInfo = sender.GetType().GetEvents()
            ' Get the receiver's type and lookup its public
            ' methods matching the naming convention:
            '  handlerPrefix+Click+handlerSufix
            Dim ReceiverType As Type = receiver.GetType()
            Dim E As System.Reflection.EventInfo
            Dim Method As System.Reflection.MethodInfo
            For Each E In SenderEvents
                Method = ReceiverType.GetMethod( _
                  handlerPrefix & E.Name & handlerSufix, _
                  System.Reflection.BindingFlags.IgnoreCase Or _
                  System.Reflection.BindingFlags.Instance Or _
                  System.Reflection.BindingFlags.NonPublic)
     
                If Not Method Is Nothing Then
                    Dim D As System.Delegate = System.Delegate.CreateDelegate(E.EventHandlerType, receiver, Method.Name)
                    If bind Then
                        'add the event handler
                        E.AddEventHandler(sender, D)
                    Else
                        'you can also remove the event handler if you pass bind variable as false
                        E.RemoveEventHandler(sender, D)
                    End If
                End If
            Next
        End Sub
    End Class

    SVP dérnièr chose , esque c'est possible de vérifier la priority de chaque groupe à l'aide d'une autre fichier XML dans le code est

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8" ?>
    <Racine>
    <GROUPE name="DomainPFE" priority="3" />
    <GROUPE name="Stage" priority="5" />
    <GROUPE name="Admin" priority="1" />
    <GROUPE name="UserIsecure" priority="2" />
    </Racine>
    et le Menu.XML de vient comme ça ==>
    Code xml : 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?xml version="1.0" encoding="utf-8"?>
    <accueil xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <GROUPE name="User">
        <MENU name="Fournisseurs" form="frm_Fournisseurs">
          <SMENU name="Liste des fournisseurs" form="frm_liste_fourni" />
          <SMENU name="Nouveau fournisseur" form="frm_nouveau_fourni" />
          <SMENU name="Modifier fournisseur" form="frm_modifier_fourni" />
          <SMENU name="Supprimer fournisseur" form="frm_supprimer_fourni" />
        </MENU>
        <MENU name="Produits" form="frm_Produits">
          <SMENU name="Liste des Produits" form="frm_liste_prod" />
          <SMENU name="Nouveau produit" form="frm_nouveau_prod" />
          <SMENU name="Modifier produit" form="frm_modifier_prod" />
          <SMENU name="Supprimer produit" form="frm_supprimer_prod" />
        </MENU>
        <MENU name="Categories" form="frm_Categories">
          <SMENU name="Liste des Categories" form="liste_cat" />
          <SMENU name="Nouveau categorie" form="frm_nouveau_cat" />
          <SMENU name="Modifier categorie" form="frm_modifier_cat" />
          <SMENU name="Supprimer categorie" form="frm_supprimer_cat" />
        </MENU>
        <MENU name="Employes" form="frm_Employes">
          <SMENU name="Liste des Employes" form="liste_emp" />
          <SMENU name="Nouveau employe" form="frm_nouveau_emp" />
          <SMENU name="Modifier employe" form="frm_modifier_emp" />
          <SMENU name="Supprimer employe" form="frm_supprimer_emp" />
        </MENU>
        <MENU name="Details commandes" form="frm_Details_commandes">
          <SMENU name="Liste des details commandes" form="liste_DC" />
          <SMENU name="Nouveau detail commande" form="frm_nouveau_DC" />
          <SMENU name="Modifier detail commande" form="frm_modifier_DC" />
          <SMENU name="Supprimer detail commande" form="frm_supprimer_DC" />
        </MENU>
        <MENU name="Commandes" form="frm_Commandes">
          <SMENU name="Liste des Commandes" form="liste_com" />
          <SMENU name="Nouveau commande" form="frm_nouveau_com" />
          <SMENU name="Modifier commande" form="frm_modifier_com" />
          <SMENU name="Supprimer commande" form="frm_supprimer_com" />
        </MENU>
     
        <MENU name="Messagers" form="frm_Messagers">
          <SMENU name="Liste des Messagers" form="liste_messag" />
          <SMENU name="Nouveau messager" form="frm_nouveau_messag" />
          <SMENU name="Modifier messager" form="frm_modifier_messag" />
          <SMENU name="Supprimer messager" form="frm_supprimer_messag" />
        </MENU>
      </GROUPE>
      <GROUPE name="Stagaire">
        <MENU name="Categories" form="frm_Categories">
          <SMENU name="Liste des Categories" form="liste_cat" />
          <SMENU name="Modifier categorie" form="frm_modifier_cat" />
        </MENU>
         </GROUPE>
      <GROUPE name="PFE2012" >
    <MENU name="Details commandes" form="frm_Details_commandes">
          <SMENU name="Liste des details commandes" form="liste_DC" />
          <SMENU name="Nouveau detail commande" form="frm_nouveau_DC" />
          <SMENU name="Supprimer detail commande" form="frm_supprimer_DC" />
        </MENU>
    </GROUPE>
      <GROUPE name="aaaaaa" >
    <MENU name="Clients" form="frm_Clients">
          <SMENU name="Liste des Clients" form="liste_cli" />
          <SMENU name="Nouveau client" form="frm_nouveau_cli" />
          <SMENU name="Modifier client" form="frm_modifier_cli" />
          <SMENU name="Supprimer client" form="frm_supprimer_cli" />
        </MENU>
    </GROUPE>
    </accueil>

  6. #6
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    La je n'ai pas le temps de regarder tout ça..
    Est ce que tu as essayé le code que je t'ai donné? Il a l'air de correspondre à ce que tu veux pourtant..

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    oui j'ai le essayé mais ça ne pas marché malheureusement

  8. #8
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Qu'est ce qui ne vas pas? Je te remet mon projet en fichier joint..
    Je dois partir, je regarderais plus tard dans la soirée si je peux..
    Fichiers attachés Fichiers attachés

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    tous va bien sauf qu'il fait pas le teste sur "priority" et que je doix entrer manuellement le groupe que je veux qu'il affiche

    si possible de le modifier de façon qu'il fait automatiquement à chaque fois le teste sur les priority dans la ficher Priority.XML puis il affiche le groupe dont la priority est la plus bas .

  10. #10
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Ok, je n'avais pas compris pour les priorités.. Je pense que cette fois c'est bon..

    J'ai rajouté des classes concernant le fichier xml des priorités:

    Priorities.vb
    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
    Imports System.Xml.Serialization
     
    Namespace Priorities
     
        'Classe Groupes (balise "Racine")
        <XmlRoot("Racine")>
        Public Class Priorities
     
            <XmlElement("GROUPE")>
            Public Property groupes As New List(Of Groupe)
     
        End Class
     
        Public Class Groupe
            <XmlAttribute("name")>
            Public Property Name As String = ""
            <XmlAttribute("priority")>
            Public Property Priority As String = ""
     
        End Class
     
    End Namespace
    Form1.vb:
    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
    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
    Imports System.Reflection
     
    Public Class Form1
     
        Dim priorityFile As String = "MenuAdmin.xml"
        Dim menuFile As String = "Menu.xml"
     
        'Chargement du formulaire
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim role As String = GetMinimumPriorityByXML(priorityFile)
            FillMenuTripByXML(menuFile, role, MenuStrip1)
        End Sub
     
     
        'Chargement des groupes d'un fichier xml
        Private Function DeserializeGroupes(ByVal filename As String) As Menus.Groupes
            DeserializeGroupes = Nothing
            Try
                Dim objStreamReader As New IO.StreamReader(filename)
                Try
                    Dim p2 As New Menus.Groupes
                    Dim x As New Xml.Serialization.XmlSerializer(GetType(Menus.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
     
        'Chargement des priorites d'un fichier xml
        Private Function DeserializePriorities(ByVal filename As String) As Priorities.Priorities
            DeserializePriorities = Nothing
            Try
                Dim objStreamReader As New IO.StreamReader(filename)
                Try
                    Dim p2 As New Priorities.Priorities
                    Dim x As New Xml.Serialization.XmlSerializer(GetType(Priorities.Priorities))
                    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
     
     
        'Recupere le nom du groupe qui a la priorite la plus faible dans le fichier xml
        Private Function GetMinimumPriorityByXML(ByVal filename As String) As String
            Dim prios As Priorities.Priorities = DeserializePriorities(filename)
            Dim prio As Integer = (From g In prios.groupes Select g.Priority).Min()
            Return (From g In prios.groupes Where g.Priority = prio Select g.Name).FirstOrDefault
        End Function
     
        'Remplissage du menu a partir du contenu du fichier xml
        Private Sub FillMenuTripByXML(ByVal filename As String, ByVal role As String, ByVal menuStrip As MenuStrip)
     
            Dim groupes As Menus.Groupes = DeserializeGroupes(filename)
            Dim groupe As Menus.Groupe = groupes.groupes.Find(Function(g As Menus.Groupe) g.Name = role)
     
            menuStrip.Items.Clear()
            If groupe IsNot Nothing Then
                For Each m As Menus.Menu In groupe.Menus
                    Dim item As ToolStripMenuItem = menuStrip.Items.Add(m.Name)
                    For Each sm As Menus.SousMenu In m.SousMenus
                        Dim item2 = item.DropDownItems.Add(sm.Name)
     
                        Dim form As String = sm.Form
                        AddHandler item2.Click, Sub(sender As Object, e As EventArgs)
                                                    'Exemple de code appellé lors du click sur le menuitem
                                                    'ici, on ouvre le formulaire (attribut form..)
                                                    Try
                                                        Dim tname As String = Assembly.GetExecutingAssembly.GetName.Name + "." + form
                                                        Dim t As Type = Type.GetType(tname)
                                                        Dim o = t.GetConstructor(Type.EmptyTypes).Invoke(New Object() {})
                                                        Dim frm As Form = o
                                                        frm.Show()
                                                    Catch ex As Exception
                                                        MsgBox("Erreur chargement du formulaire " + form)
                                                    End Try
                                                End Sub
                    Next
                Next
            Else
                MsgBox("Menu '" + role + "' n'a pas été trouvé.")
            End If
        End Sub
     
    End Class
    Je te remet le projet en fichier joint.
    Fichiers attachés Fichiers attachés

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    Merci pour vos aides et votre soutien indéfectible

    je compte sur votre amabilité de me suggérer une solution pour la proposition suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     'Recupere le nom du groupe qui a la priorite la plus faible dans le fichier xml
        Private Function GetMinimumPriorityByXML(ByVal filename As String) As String
            Dim prios As Priorities.Priorities = DeserializePriorities(filename)
            Dim prio As Integer = (From g In prios.groupes Select g.Priority).Min()
            Return (From g In prios.groupes Where g.Priority = prio Select g.Name).FirstOrDefault
        End Function
    la fonction GetMinimumPriorityByXML me permet de récupérer le groupe qui a la priorite la plus faible dans le fichier xml .
    pouvais-je aussi ajouter une condition qui me permet de récupérer le groupe qui a la priorite la plus faible dans le fichier xml et à la fois membre dans une arrayliste passer en paramètre dans la dite fonction

  12. #12
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Peut être comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Function GetMinimumPriorityByXML(ByVal filename As String, ByVal roles As Collection) As String
            Dim prios As Priorities.Priorities = DeserializePriorities(filename)
            Dim prio As Integer = (From g In prios.groupes Where roles.Contains(g.Name) Select g.Priority).Min()
            Return (From g In prios.groupes Where g.Priority = prio Select g.Name).FirstOrDefault
        End Function

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    merci infiniment je vais essayer de l'adapter dans mon application

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    salut , svp comment rendre mes Formes accessible lorsque je choisis une parmi eux dans le menue dynamique comme vous avez fais , parseque j'ai fais une copie conforme de votre code mais il ne trouve pas les forme pourtant que j'ai créer un dossier "frm" comme vous et jai placés les formes dedans !!!

  15. #15
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Salut,

    Le fait que les form ne soit pas dans le dossier "frm" n'est pas grave mais ça marche seulement si c'est dans le même projet (même assembly).

    Est ce que tu as un message d'erreur? Lequel?

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    oui elles sont dans le meme projet
    il m'affiche le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox("Erreur chargement du formulaire " + form)

  17. #17
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Je te mets 2 images en fichier joint..

    Regarde comme dans NomAssembly.jpg le nom de l'assembly qui contient tes forms et remplace comme dans l'autre image au niveau de la fleche n°1.

    De plus, j'ai modifié la fonction FillMenuStripByXML pour que le message d'erreur apparaisse (cf fleche n°2 dans l'image). Si tu continue d'avoir une erreur, donne moi le message, ça pourra m'aider.
    Images attachées Images attachées   

  18. #18
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    encore le meme problème
    le message :
    Erreur chargement du formulaire frm_list_fornisseurs
    La référence d'objet n'est pas définie à une instance d'un objet

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 33
    Par défaut
    aha c'est bien le problème est résolue
    mon Assembly Name est : Active directory
    à la prémiére fois jé insérer Active directory
    mais quand jé ajouter une tiré ==>Active_directory :p
    merci vous êtes leader

  20. #20
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Ok

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un menu dynamique à partir d'un XML
    Par moniayousfi dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 24/03/2015, 20h40
  2. [XSL] Génération menu dynamique d'un site : PHP & XSL & XML
    Par kaboume dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 24/11/2009, 17h48
  3. [PDE] Lien entre menu dynamique et plugin.xml
    Par simsky dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 21/06/2005, 11h53
  4. [JSP]menu dynamique en jsp
    Par laouedjahmed dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 22/03/2004, 10h50
  5. Menu dynamique sous Flash MX
    Par dens63 dans le forum Flash
    Réponses: 7
    Dernier message: 29/10/2003, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo