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 :

[VB.NET] Action sur menu ToolStripMenuItem


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [VB.NET] Action sur menu ToolStripMenuItem
    Bonjour,

    J'ai crée un menu à l'aide d'un ToolStripMenuItem qui permet de parcourir un répertoire et d'afficher les dossiers et fichiers. Ce que je cherche à faire et de lancer une action lorsque l'on clique sur un élément qui est un fichier (lancer une Sub par exemple). Malheureusement, je n'arrive pas à m'en sortir...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListerLesRepertoire("D:\TEST"), Nothing)

    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
    Public Sub ListerLesRepertoire(ByVal Rep As String, ByVal Parent As ToolStripMenuItem)
            Try
                'Récupère la liste des entrées du répertoire
                Dim Liste As String() = Directory.GetFileSystemEntries(Rep)
                Dim Entree As String
     
                For Each Entree In Liste 'Pour chaque entrée de la liste
                    Dim TmpName As String = Microsoft.VisualBasic.Mid(Entree, Len(Rep) + 1) 'On découpe proprement le nom du fichier ou répertoire
                    TmpName = Microsoft.VisualBasic.Replace(TmpName, "\", "") 'On enlève les caractères parasites !
     
                    If File.Exists(Entree) Then     'Si c'est un fichier
                        AddNode(TmpName, True, Parent)  
                    Else    'Si  c'est un répertoire
                        Dim TmpNode As ToolStripMenuItem 'Var tempo pour sauver le noeud
                        TmpNode = AddNode(TmpName, False, Parent) 'On ajoute le rep
                        ListerLesRepertoire(Entree, TmpNode) 'On liste le contenus de ce répertoire
                    End If
                Next Entree
            Catch Ex As System.UnauthorizedAccessException 'si le répertoire est protégé
                Exit Sub
            Catch e As Exception 'en cas d'erreurs
                MsgBox("Erreur : " & e.Message, MsgBoxStyle.Critical)
            End Try
        End Sub
    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
       Private Function AddNode(ByVal StrNom As String, ByVal BlFile As Boolean, ByVal Parent As ToolStripMenuItem) As ToolStripMenuItem
            Try
                Dim TmpNode As ToolStripMenuItem      
     
                If Not Parent Is Nothing Then ' Si Parent n'est pas à nothing 
     
                    ' Cas d'un fichier (et non un dossier)
                    If BlFile Then
                        ' Cas d'une machine
                        Dim no As New ToolStripMenuItem("", Nothing, New EventHandler(AddressOf pouet))
                        no.Text = StrNom.Remove((Len(StrNom) - 4), 4)
                        no.Image = Global.GECOSSH.My.Resources.Resources.ico_ordi
     
                        Parent.DropDownItems.Insert(0, no)
                        TmpNode = no
                    Else
                        ' Cas d'un dossier
                        Dim no As New ToolStripMenuItem
                        no.Text = StrNom
                        no.Image = Global.GECOSSH.My.Resources.Resources.ico_dossier
     
                        Parent.DropDownItems.Insert(0, no)
                        TmpNode = no
                    End If
     
                Else ' Si Parent Est à nothing c sans doute le premier élément du treeview ou une racine
     
                    If BlFile Then
                        ' Cas d'une machine
                        Dim no As New ToolStripMenuItem("", Nothing, New EventHandler(AddressOf pouet))
                        no.Text = StrNom.Remove((Len(StrNom) - 4), 4)
                        no.Image = Global.GECOSSH.My.Resources.Resources.ico_ordi
     
                        ServeursToolStripMenuItem1.DropDownItems.Insert(0, no)
                        TmpNode = no
                    Else
                        ' Cas d'un dossier
                        Dim no As New ToolStripMenuItem()
                        no.Text = StrNom
                        no.Image = Global.GECOSSH.My.Resources.Resources.ico_dossier
     
                        ServeursToolStripMenuItem1.DropDownItems.Insert(0, no)
                        TmpNode = no
                    End If
     
                End If
     
                Application.DoEvents()  
                Return TmpNode
            Catch ex As Exception
                Return Nothing
                MsgBox(ex.ToString)
            End Try
        End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub pouet(ByVal sender As System.Object, ByVal e As System.EventArgs)
     
            MsgBox(e.ToString)
     
        End Sub
    Pour le moment j'arrive juste à afficher une boite de message avec le nom du fichier, mais j'aimerais pouvoir lancer une Sub avec plus de paramètres... Et je trouve absolument pas comment faire

    Vous avez une idée ?


    Merci.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Ton code et ta description me permet de dire que ça fonctionne comme ça devrait, c'est-à-dire qu'au clic sur un élément du menu, la méthode pouet est appelée.

    Maintenant si par exemple tu souhaites effectuer une action particulière sur chaque menuitem, il faut tester le sender dans ta méthode pouet et appeler ton autre méthode avec les informations accessibles dans la méthode pouet.

    En gros quand tu a ajouté tes nodes, tu as défini qu'au clic il faudra appeler la méthode pouet (cf : abonnement aux événements), ta méthode pouet doit avoir une signature identique à celle attendue, tu ne pourras donc jamais appeler une méthode ayant plus de paramètres sur cet événement.

Discussions similaires

  1. [AC-2010] Aucune action clic sur menu
    Par ACT_Usagi dans le forum Access
    Réponses: 2
    Dernier message: 24/08/2012, 07h44
  2. Action sur une self div + changement menu
    Par LeHibou2 dans le forum jQuery
    Réponses: 1
    Dernier message: 09/04/2012, 08h06
  3. Ajouter une action sur une barre de menu
    Par alex2746 dans le forum Qt
    Réponses: 2
    Dernier message: 01/04/2010, 15h39
  4. [VB.NET] Action sur l'évènement IMPRESSION
    Par stephane93fr dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/04/2004, 17h03
  5. [Flash MX] Action sur un bouton
    Par WriteLN dans le forum Flash
    Réponses: 9
    Dernier message: 20/10/2003, 14h01

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