web-dev-qa-db-fra.com

Ajout d'un menu clic droit à un élément

Je cherchais depuis un certain temps un simple menu contextuel pour un seul élément. Par exemple, si je clique avec le bouton droit de la souris sur une image, je souhaite qu'un petit menu propose mes propres étiquettes: Ajouter, Supprimer, etc. Si quelqu'un pouvait m'aider, je serais le plus reconnaissant.

Merci d'avoir regardé.

Voici le code complété:

    ContextMenu cm = new ContextMenu();             
    cm.MenuItems.Add("Item 1", new EventHandler(Removepicture_Click));             
    cm.MenuItems.Add("Item 2", new EventHandler(Addpicture_Click));              
    pictureBox1.ContextMenu = cm; 
36
Marshal

Ajoutez un menu contextuel à votre formulaire, puis affectez-le dans les propriétés du contrôle sous ContextMenuStrip. J'espère que cela t'aides :).

J'espère que cela t'aides:

ContextMenu cm = new ContextMenu();
cm.MenuItems.Add("Item 1");
cm.MenuItems.Add("Item 2");

pictureBox1.ContextMenu = cm;
65
Yuki Kutsuya

Ceci est une réponse complète à cette question. Je l’ai fait parce que cette page figure en haut des résultats de recherche Google et que la réponse n’entre pas assez dans les détails. Cet article suppose que vous maîtrisez les formulaires Visual Studio C #. Ceci est basé sur VS2012.

  1. Commencez par faire glisser un ContextMenuStrip sur le formulaire. Il vous suffira de le placer dans le coin supérieur gauche où vous pourrez ajouter vos éléments de menu et le renommer à votre guise.

  2. Vous devrez voir le code et entrer vous-même un événement sur le formulaire. Créez un événement de souris enfoncé pour l'élément en question, puis affectez-lui un événement de clic droit (j'ai appelé le ContextMenuStrip "rightClickMenuStrip"):

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
    switch (e.Button)
        {
            case MouseButtons.Right:
            {
                rightClickMenuStrip.Show(this, new Point(e.X, e.Y));//places the menu at the pointer position
            }
            break;
        }
    }
    
  3. Affectez le gestionnaire d'événements manuellement à form.designer (vous devrez peut-être ajouter un "using" pour System.Windows.Forms; vous pouvez simplement le résoudre):

    this.pictureBox1.MouseDown += new MouseEventHandler(this.pictureBox1_MouseDown);
    
  4. À ce stade, il suffit de double-cliquer sur chaque élément du menu et d’effectuer les opérations souhaitées pour chaque événement de clic de la même manière que pour tout autre bouton.

C'est le code de base pour cette opération. Vous pouvez évidemment le modifier pour s’adapter à vos pratiques de codage.

22
Cheesus Toast

Si vous utilisez Visual Studio, il existe également une solution graphique:

  1. À partir de Toolbox, ajoutez un ContextMenuStrip
  2. Sélectionnez le menu contextuel et ajoutez les éléments du clic droit
  3. Pour chaque élément, définissez les événements de clic sur les fonctions correspondantes.
  4. Sélectionnez le formulaire/bouton/image/etc (n'importe quel élément) auquel le menu contextuel sera connecté.
  5. Définissez sa propriété ContextMenuStrip sur le menu que vous avez créé. 
12
Dorku

Cela dit, il est utile de savoir que les points eX/eY sont relatifs au contrôle. Ainsi, si (comme j’étais) vous ajoutez un menu contextuel à une liste ou quelque chose de similaire, vous devrez l’ajuster avec l'origine du formulaire. Dans l'exemple ci-dessous, j'ai ajouté 20 à x/y pour que le menu apparaisse légèrement à droite et sous le curseur.

cmDelete.Show(this, new Point(e.X + ((Control)sender).Left+20, e.Y + ((Control)sender).Top+20));
0
Paul