2012-03-22 1 views
26

Я искал какое-то время для простого контекстного меню для одного элемента. Например, если я щелкнул правой кнопкой мыши на изображении, я хочу, чтобы в небольшом меню появлялись мои собственные ярлыки: «Добавить», «Удалить» и т. Д. Если бы кто-нибудь мог помочь, я был бы самым большим.Добавление меню правой кнопки мыши к элементу

Спасибо, что посмотрели.

Вот завершенный код:

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; 

ответ

54

Добавить ContextMenu в форму, а затем назначить его в свойствах элемента управления при ContextMenuStrip. Надеюсь это поможет :).

Надеется, что это помогает:

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

pictureBox1.ContextMenu = cm; 
+0

Совершенно спасибо! Готовился к прыжку ... – Marshal

+0

Добро пожаловать;). –

+2

Быстрый вопрос, который может показаться глупым. Как я мог бы добавить функции к этим элементам? – Marshal

17

Это исчерпывающий ответ на этот вопрос. Я сделал это, потому что эта страница высока в результатах поиска Google, и ответ не идет достаточно подробно. Это сообщение предполагает, что вы компетентны в использовании форм Visual Studio C#. Это основано на VS2012.

  1. Начните с простого перетаскивания ContextMenuStrip на форму. Он просто поместит его в верхний левый угол, где вы можете добавить свои пункты меню и переименовать его по своему усмотрению.

  2. Вам нужно будет просмотреть код и ввести событие в форму. Создание мыши вниз событие для элемента в вопросе, а затем назначить правильное событие щелчка для него, как это (я назвал 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. Назначение обработчика событий вручную в form.designer (возможно, вам нужно добавить «с помощью» для System.Windows.Forms, вы можете просто решить ее):

    this.pictureBox1.MouseDown += new MouseEventHandler(this.pictureBox1_MouseDown); 
    
  4. Все, что нужно в этот момент просто дважды щелкните по каждому пункту меню и сделать желаемые операции для каждого события click так же, как и для любой другой кнопки.

Это основной код для этой операции. Вы, очевидно, можете изменить его, чтобы соответствовать вашим правилам кодирования.

+0

отличный ответ! Вы также могли бы использовать оператор if Если (e.Button == MouseButtons.Right) –

+2

Если что-то не изменилось с момента опубликования этого ответа, вам не нужно вручную указывать событие «MouseDown» в коде. Все, что вам нужно сделать, это установить свойство ContextMenuStrip' в правильное 'ContextMenuStrip' для элемента управления, с которым вы хотите связать его. Это сокращает шаги 2 и 3 (хотя добавление намного меньшего шага 2) к вашему решению. –

10

Если вы используете Visual Studio, есть GUI решение, а также:

  1. С Toolbox добавить ContextMenuStrip
  2. Выберите контекстное меню и добавьте право пунктов CLICK
  3. Для каждого item установите события щелчка на соответствующие функции.
  4. Выберите форму/кнопку/изображение/и т. д. (любой элемент), в который будет подключено меню правой кнопки мыши.
  5. Свойство ContextMenuStrip в меню, которое вы создали.
0

Сразу после этого полезно знать, что e.X/e.Y точек относительно элемента управления, поэтому, если (поскольку я был) вы добавляете контекстное меню в список или что-то подобное, вы хотите настроить его с помощью формы. В приведенном ниже примере я добавил 20 к x/y, чтобы меню немного показалось справа и под курсором.

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