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 :

Lier des routines à un contextMenu


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Points : 118
    Points
    118
    Par défaut Lier des routines à un contextMenu
    Bonjour et bonne année à tous
    Je travaille sous Visual Studio 2012 et voudrais créer un menu contextuel sur un PictureBox.
    J'ai trouvé un début d'exemple en C# que j'ai modifié en VB.
    Quand j'effectue un clic droit sue ce contrôle, j'ai bien un menu avec trois items.
    Mon problème : Comment déclencher une routine avec un clic gauhe sur chacun des trois items ?
    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
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim contextMenu1 As ContextMenu
            contextMenu1 = New ContextMenu()
            Dim menuItem1 As MenuItem
            menuItem1 = New MenuItem()
            Dim menuItem2 As MenuItem
            menuItem2 = New MenuItem()
            Dim menuItem3 As MenuItem
            menuItem3 = New MenuItem()
     
            contextMenu1.MenuItems.AddRange(New MenuItem() {menuItem1, menuItem2, menuItem3})
            menuItem1.Index = 0
            menuItem1.Text = "MenuItem1"
            menuItem2.Index = 1
            menuItem2.Text = "MenuItem2"
            menuItem3.Index = 2
            menuItem3.Text = "MenuItem3"
     
            PictureBox1.ContextMenu = contextMenu1
     
        End Sub
    Merci de votre aide.

    Claude Azoulai

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 216
    Points : 154
    Points
    154
    Par défaut
    Une des solutions est que tu déclares tes variables avec la clause WithEvents et, ensuite, tu déclares tes Sub avec la clause Handle. Comme dans l'exemple ci-dessous pour un ToolStripButton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Dim WithEvents oToolStripButtonRotDroite As New System.Windows.Forms.ToolStripButton
     
        Private Sub oToolStripButtonRotDroite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                    Handles oToolStripButtonRotDroite.Click
     
    End Sub
    Bonne année!
    Paul Van Walleghem

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Pour chaque élément du menu il faut associer un évènement à une procédure qui sert de gestionnaire d'évènement.
    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
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim contextMenu1 As ContextMenu = New ContextMenu()
            Dim menuItem1 As MenuItem = New MenuItem()
            menuItem1.Index = 0
            menuItem1.Text = "MenuItem1"
            AddHandler menuItem1.Click, AddressOf MC1_Click
            Dim menuItem2 As MenuItem = New MenuItem()
            menuItem2.Index = 1
            menuItem2.Text = "MenuItem2"
            AddHandler menuItem2.Click, AddressOf MC2_Click
            Dim menuItem3 As MenuItem = New MenuItem()
            menuItem3.Index = 2
            menuItem3.Text = "MenuItem3"
            AddHandler menuItem3.Click, AddressOf MC3_Click
            contextMenu1.MenuItems.AddRange(New MenuItem() {menuItem1, menuItem2, menuItem3})
            PictureBox1.ContextMenu = contextMenu1
        End Sub
        ' Les procédures liées aux évènements.
        Sub MC1_Click()
            MessageBox.Show("clic sur menu 1 ")
        End Sub
        Sub MC2_Click()
            MessageBox.Show("clic sur menu 2 ")
        End Sub
        Sub MC3_Click()
            MessageBox.Show("clic sur menu 3 ")
        End Sub
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 216
    Points : 154
    Points
    154
    Par défaut
    Oui. Les deux techniques reviennent au même. Non?
    Paul Van Walleghem

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    tu peux faire comme ceci si tout est fait par code:
    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
     
    Public Class Form1
     
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim contextMenu1 As ContextMenu
            contextMenu1 = New ContextMenu()
            Dim menuItem1 As MenuItem
            menuItem1 = New MenuItem()
            Dim menuItem2 As MenuItem
            menuItem2 = New MenuItem()
            Dim menuItem3 As MenuItem
            menuItem3 = New MenuItem()
     
            contextMenu1.MenuItems.AddRange(New MenuItem() {menuItem1, menuItem2, menuItem3})
            menuItem1.Index = 0
            menuItem1.Text = "MenuItem1"
            menuItem2.Index = 1
            menuItem2.Text = "MenuItem2"
            menuItem3.Index = 2
            menuItem3.Text = "MenuItem3"
            For Each item As MenuItem In contextMenu1.MenuItems
                AddHandler item.Click, AddressOf item_Click
            Next
     
     
            PictureBox1.ContextMenu = contextMenu1
            Me.ContextMenu = contextMenu1
     
        End Sub
     
        Private Sub item_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim ctl As MenuItem = CType(sender, MenuItem)
            Dim ctxMenu As ContextMenu = CType(ctl.Parent, ContextMenu)
            MessageBox.Show(ctl.Text & ctxMenu.SourceControl.Name)
            If ctxMenu.SourceControl Is PictureBox1 Then
                OnMenuPic(ctl.Index)
            ElseIf ctxMenu.SourceControl Is Me Then
                OnMenuFrm(ctl.Index)
     
            End If
     
        End Sub
        Private Sub OnMenuPic(ByVal index As Integer)
                Select Case index
                    Case 0
                    MessageBox.Show("index" & index.ToString & " =>pic")
                    Case 1
                    MessageBox.Show("index" & index.ToString & " =>pic")
                    Case 2
                    MessageBox.Show("index" & index.ToString & " =>pic")
                End Select
     
     
        End Sub
        Private Sub OnMenuFrm(ByVal index As Integer)
     
            Select Case index
                Case 0
                    MessageBox.Show("index" & index.ToString & " =>form")
                Case 1
                    MessageBox.Show("index" & index.ToString & " =>form")
                Case 2
                    MessageBox.Show("index" & index.ToString & " =>form")
            End Select
     
     
        End Sub
    End Class
    Ou bien:
    utilises la declaration WithEvents au niveau form et la clause Handles,tout depend du besoin......

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Points : 118
    Points
    118
    Par défaut
    Merci à vous tous.
    Tous vos exemples sont intéressants et mènent à la solution de mon problème, qui n'en n'est plus un.
    J'ai choisi (car j'avais le choix), la solution de rv26t qui nécessite le moins d'écriture, à mon avis.
    A 80 ans, j'essaie d'être le plus concis possible.
    En tous les cas, vous m'avez bien aidé.

    Claude Azoulai

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 216
    Points : 154
    Points
    154
    Par défaut
    C'était un plaisir.
    Paul Van Walleghem

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 04/03/2008, 15h51
  2. Lier des tables
    Par Al_Ameen dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 18/12/2005, 14h38
  3. Comment lier des tables Access ?
    Par po.lombard dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/12/2005, 12h54
  4. [CR8.5] Aide pour lier des etats
    Par Silvinho42 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 28/04/2005, 10h11
  5. [C#] Lier des boutons radio dans une application mobile
    Par Loïc56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/04/2005, 13h00

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