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

Windows Forms Discussion :

VB2005 - Probleme LIEN MenuStrip avec DOC XML


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut VB2005 - Probleme LIEN MenuStrip avec DOC XML
    Bonjour à tous,

    Je viens soliciter votre aide après maintes recherches infructueuses sur MSDN et différents code sources.
    Je développe un programme en VB 2005, qui écrit et lit des informations dans un fichier XML, en vu de créer un Lanceur de Programme.
    Pour cela,

    Actuellement j'ai une procédure Affichage () qui me permet de parcourir les noeuds "INFOS" du document XML.

    Une boucle me permet de parcourir les différents noeuds de la collection "INFOS", et pour tous les noeuds enfants du noeud, de récupérer deux champs : "Nom_Raccourci" et "Chemin"



    Actuellement j'affiche dans un MenuStrip les champs "Nom_Raccourci" détenu dans le document XML, et j'aimerai pouvoir associer un évènement (clic), pour que lorsque l'utilisateur choisi un "Nom_Raccourci", l'application dont le "Chemin "est contenu dans la variable se lance...

    J'espère avoir été assez clair.

    Ci dessous l'extrait de cette procédure

    *****************************************************************
    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
     
            Public Sub Affichage()
     
            ' Création de l'objet XMLDocument
            Dim XmlDoc As New Xml.XmlDocument
            Try
                XmlDoc.Load("c:\fichier.XML")
            Catch ex As Exception
                MsgBox("Impossibilité de charger le fichier XML")
            End Try
     
            ' Création de la collection nœuds INFOS
            Dim element As Xml.XmlNodeList = XmlDoc.SelectNodes("//infos")
     
            ' Création des variables de noeud unique 
            Dim noeud As Xml.XmlNode
            Dim noeudEnf As Xml.XmlNode
     
            Dim _NomRaccourci, _Chemin As String
     
            ' Pour tous les noeuds de la collection INFOS
            ' et Pour tous les noeuds enfants du noeud
            ' On recupere le champs Nom_Raccourci
            ' Si on trouve le noeud "Nom_Raccourci"
            ' On récupère son texte qu'on instancie à la variable _NomRaccourci
            ' Et on l'affiche dans le MenuStrip
     
     
            For Each noeud In element
                For Each noeudEnf In noeud.ChildNodes
                    If noeudEnf.LocalName = "Nom_Raccourci" Then
                        _NomRaccourci = noeudEnf.InnerText
                        Menu_Strip.Items.Add(_NomRaccourci)
     
                    ElseIf noeudEnf.LocalName = "Chemin" Then
                       ' Je récupère bien le chemin du nom_raccourci
                       _Chemin = noeudEnf.InnerText
                    End If
     
                Next
     
            Next
     
        End Sub
    ***************************************************************


    Un extrait de mon document XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xml>
      <infos>
        <Nom_Raccourci>Planmarker</Nom_Raccourci>
        <Chemin>C:\Program Files\Ashampoo\Ashampoo Office 2008\PlanMaker.exe</Chemin>
      </infos>
    </xml>
    Avez vous des remarques ou des idées à me donner ?

    Merci d'avance !!!

  2. #2
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Une form avec un menu "Principal", 2 boutons pour ajouter des sous menus :

    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
    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    PrincipalToolStripMenuItem.DropDownItems.Add("sous menu 1")
    EndSub
    PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    PrincipalToolStripMenuItem.DropDownItems.Add("sous menu 2")
    EndSub
    PrivateSub PrincipalToolStripMenuItem_DropDownItemClicked(ByVal sender AsObject, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles PrincipalToolStripMenuItem.DropDownItemClicked
    Dim i AsInteger
    For i = 0 To PrincipalToolStripMenuItem.DropDownItems.Count - 1
    If PrincipalToolStripMenuItem.DropDownItems.Item(i).Selected = TrueThen
    MsgBox(PrincipalToolStripMenuItem.DropDownItems.Item(i).Text)
    EndIf
    Next
    EndSub
    

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta suggestion OhMonBato.
    Je n'ai pas de problèmes particuliers pour afficher dynamiquement les DropDownItems tirés de mon document XML, le seul problème que je rencontre se situe au niveau de l'attribution de son évènement lorsque l'utilisateur clic sur l'un des DropDownItems.

    Le chemin de l'application qui doit se lancer sur l'évènement clic du DropDownItems, se trouve dans ma variable "_Chemin".


  4. #4
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    C'est un Shell que tu veux faire alors ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Oui en quelque sorte ! En fait je souhaite faire un Lanceur D'application.
    Les données sont sauvegardées en XML.
    Et moi je puise les infos dans ce doc.

    Pour lancer les appli j'ai pensé à la classe "Process".
    Je n'arrive seulement pas à attribuer pour un DropDownItem dynamique, en plus du nom de l'application (variable _NomRaccourci), l'évènement "clic" qui exécutera le programme dont le chemin est contenu dans ma variable "_Chemin"....

  6. #6
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Tu as essayé l'exemple que je t'ai donné au dessus bien sur ? Il ne réagit pas aux clics sur les sous menus créés dynamiquement ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    J'avais une erreur sur le Handles, mais à présent ça fonctionne !
    Je vais adapter ce code à ma requête, je poste ce qu'il en est ensuite
    Merci pour ton aide ^^

    Ça avance... !
    Au click d'une DropDownItem, l'évènement me lance bien le contenu de la variable _Chemin.
    Malheureusement comme je ne stocke pas le contenu de la variable _Chemin à chaque passage de boucle, ne se lance que la dernière valeur attribuée.
    N'y a t'il pas d'autre moyen que de créer un tableau pour stocker le contenu de la variable _Chemin à chaque passage de boucle ?

  8. #8
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    tu peux stocker cette variable dans le Tag du menu, en gardant le même exemple que précédemment, ça donnerait par exemple :

    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
    PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    PrincipalToolStripMenuItem.DropDownItems.Add("sous menu 1")
    PrincipalToolStripMenuItem.DropDownItems.Item(PrincipalToolStripMenuItem.DropDownItems.Count - 1).Tag = "Tag du sous menu 1"
    EndSub
    PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    PrincipalToolStripMenuItem.DropDownItems.Add("sous menu 2")
    PrincipalToolStripMenuItem.DropDownItems.Item(PrincipalToolStripMenuItem.DropDownItems.Count - 1).Tag = "Tag du sous menu 2"
    EndSub
    PrivateSub PrincipalToolStripMenuItem_DropDownItemClicked(ByVal sender AsObject, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles PrincipalToolStripMenuItem.DropDownItemClicked
    Dim i AsInteger
    For i = 0 To PrincipalToolStripMenuItem.DropDownItems.Count - 1
    If PrincipalToolStripMenuItem.DropDownItems.Item(i).Selected = TrueThen
    MsgBox(PrincipalToolStripMenuItem.DropDownItems.Item(i).Tag)
    EndIf
    Next
    EndSub
    

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Tout simplement merveilleux

    Je cherchais une propriété pour "stocker" la valeur mais... connaissais pas le TAG ! vais me documenter dessus.

    En tout cas merci bien pour ton aide précieuse

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut bonne continuation
    bonjour
    voila une autre méthode pour se faire

    1- tu surcharge la classe ToolStripMenuItem
    le code que je te propose c'est

    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
    Public Class ToolStripMenuItemCoposant
        Inherits ToolStripMenuItem
        Public Chemin As String
        ''' <summary>
        ''' le nouveau constructeur 
        ''' </summary>
        ''' <param name="paramChemin"></param>
        ''' <param name="paramText"></param>
        ''' <param name="paramImage"></param>
        ''' <param name="paramOnclick"></param>
        ''' <remarks></remarks>
        Public Sub New(ByVal paramChemin As String, ByVal paramText As String, ByVal paramImage As System.Drawing.Image, ByVal paramOnclick As System.EventHandler)
            MyBase.New(paramText, paramImage, paramOnclick)
            Chemin = paramChemin
        End Sub
        ''' <summary>
        ''' le constructeur de base
        ''' </summary>
        ''' <param name="paramNom"></param>
        ''' <remarks></remarks>
        Public Sub New(ByVal paramNom As String)
            MyBase.New(paramNom)
        End Sub
        ''' <summary>
        ''' Créer une méthode pour l'ajout 
        ''' (pour prendre en charge le nouveau type)
        ''' </summary>
        ''' <param name="paramToolStripMenuItemCoposant"></param>
        ''' <remarks></remarks>
        Public Sub add(ByRef paramToolStripMenuItemCoposant As ToolStripMenuItemCoposant)
            'passer le ToolStripMenuItem en paramétre
            MyBase.DropDownItems.Add(paramToolStripMenuItemCoposant)
            'Assigner un chemin relatif au ToolStripMenuItem en paramétre
            Me.Chemin = paramToolStripMenuItemCoposant.Chemin
        End Sub
    End Class

    ceci garantira que chaque ToolStripMenuItem (selon la nouvelle classe qui hérites de la classe de base ToolStripMenuItem) aura un chemin stocké et accessible depuis le simple clik

    mnt, j vais reprendre ton code (que j un peu l'ai modifié)

    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
            Dim Menu_Strip As MenuStrip
     
            Menu_Strip = New MenuStrip()
            Me.Controls.Add(Menu_Strip)
            Dim RacineMenu As New ToolStripMenuItemCoposant("Racine1")
     
            ' Création de l'objet XMLDocument
            Dim XmlDoc As New Xml.XmlDocument
            Try
                XmlDoc.Load("c:\fichier.XML")
            Catch ex As Exception
                MsgBox("Impossibilité de charger le fichier XML")
            End Try
     
            'Réinitialisation du menu strip
            Menu_Strip.Items.Clear()
     
            ' Création de la collection nœuds INFOS
            Dim element As Xml.XmlNodeList = XmlDoc.SelectNodes("//infos")
     
            ' Création des variables de noeud unique 
            Dim noeud As Xml.XmlNode
            Dim noeudEnf As Xml.XmlNode
     
            Dim _NomRaccourci, _Chemin As String
     
            ' Pour tous les noeuds de la collection INFOS
            ' et Pour tous les noeuds enfants du noeud
            ' On recupere le champs Nom_Raccourci
            ' Si on trouve le noeud "Nom_Raccourci"
            ' On récupère son texte qu'on instancie à la variable _NomRaccourci
            ' Et on l'affiche dans le MenuStrip
     
     
            For Each noeud In element
     
                For Each noeudEnf In noeud.ChildNodes
                    If noeudEnf.LocalName = "Nom_Raccourci" Then
                        _NomRaccourci = noeudEnf.InnerText
     
     
                    ElseIf noeudEnf.LocalName = "Chemin" Then
                        ' Je récupère bien le chemin du nom_raccourci
                        _Chemin = noeudEnf.InnerText
                    End If
     
                Next
                'Instantiation du composant à base du chemin et du nom du raccourci et l'imge puis le handler
                Dim NewMenu As New ToolStripMenuItemCoposant(_Chemin, _NomRaccourci, Nothing, New EventHandler(AddressOf windowNewMenu_Click))
                RacineMenu.add(NewMenu)
                CType(RacineMenu.DropDown, ToolStripDropDownMenu).ShowImageMargin = False
                CType(RacineMenu.DropDown, ToolStripDropDownMenu).ShowCheckMargin = True
     
     
            Next
            Menu_Strip.MdiWindowListItem = RacineMenu
            ' Add the window ToolStripMenuItem to the MenuStrip.
            Menu_Strip.Items.Add(RacineMenu)
     
            ' Dock the MenuStrip to the top of the form.
            Menu_Strip.Dock = DockStyle.Top
     
            ' The Form.MainMenuStrip property determines the merge target.
            Me.MainMenuStrip = Menu_Strip

    puis tu test ton bout de code
    en ajoutant se p'tit code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        ''' <summary>
        ''' 
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        ''' <remarks></remarks>
        Private Sub windowNewMenu_Click(ByVal sender As Object, ByVal e As EventArgs)
            MsgBox(CType(sender, ToolStripMenuItemCoposant).Chemin)
     
        End Sub

    et en se basant sur le fichier Xml (que tu dois changer bien sûr)

    <xml>
    <infos>
    <Nom_Raccourci>Planmarker</Nom_Raccourci>
    <Chemin>C:\Program Files\Ashampoo\Ashampoo Office 2008\PlanMaker.exe</Chemin>
    </infos>
    <infos>
    <Nom_Raccourci>Planmarker1</Nom_Raccourci>
    <Chemin>C:\Program Files\Ashampoo\Ashampoo Office 2008\PlanMaker1.exe</Chemin>
    </infos>
    <infos>
    <Nom_Raccourci>Planmarker2</Nom_Raccourci>
    <Chemin>C:\Program Files\Ashampoo\Ashampoo Office 2008\PlanMaker2.exe</Chemin>
    </infos>
    </xml>
    comme ça, je croix que tu aura un gain en terme de:
    - visibilité du code ===> facilité de modification + maintenance + évolution des fonctionnalités de tes classes
    - tu peut facilement spécialiser tes objets ===> (tu poura facilement ajouter une méthode de sécurité d'accès au programmes + ...)
    - ...

    fi amani lah

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    farhaoui.mohamed,
    Je suis en train d'essayer de comprendre ton code, je me suis rendu compte que j'ai mis de coté trop de choses importantes pour la création des classes ! (je débute)
    Je vais me replonger dans les cours notamment sur la surcharge de constructeur.
    En tout cas merci beaucoup !

Discussions similaires

  1. Probleme Importer SWF Avec du Xml
    Par jf1988fr dans le forum Flash
    Réponses: 1
    Dernier message: 25/05/2007, 11h07
  2. [Tomcat]probleme avec web.xml
    Par The_freeman dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 25/01/2006, 22h32
  3. Comment fabriquer un doc.txt avec un doc.xml et un
    Par ktel dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 20/01/2006, 12h13
  4. Réponses: 6
    Dernier message: 25/04/2005, 14h49
  5. Réponses: 3
    Dernier message: 27/01/2004, 16h15

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