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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    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 éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 216
    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!

  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
    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 éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

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

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    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 éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 216
    Par défaut
    C'était un plaisir.

+ 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