给一个项目添加右键菜单

53

我已经寻找了一段时间,想要一个简单的右键菜单用于单个项目。例如,如果我右键单击图片,我希望会弹出一个小菜单,上面标有我的自定义标签:添加、删除等。如果有人能够帮助我,我将非常感激。

谢谢您的关注。

这是完整的代码:

    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; 
5个回答

83

在您的表单上添加一个上下文菜单,然后在控件的属性中分配它到 ContextMenuStrip。

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

@Marshal 我没听懂,但是快速搜索显示了方法:https://dev59.com/YG025IYBdhLWcg3wzZT3 - ErTR
1
当用户点击Item1时,我该如何创建一个事件? - Kaan Karamanoğlu
如何处理菜单项的事件...比如知道它是第一项还是第二项? - Si8
要添加事件,您只需要动态地将新的事件处理程序分配给menuItem。 MenuItem具有构造函数(string text,EventHandler OnClick) 因此,您可以像这样添加具有事件的新菜单项 cm.MenuItems.add(new MenuItem("Item 1", new EventHandler(item1_Click))); - LongToeBoy
作为一点说明,您无需添加右键单击事件来显示“ContextMenu” - 只需设置ContextMenu = cm即可自动添加该处理。 - undefined

42

这是对这个问题的全面回答。我这样做是因为这个页面在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(您可能需要添加一个“using”来引用System.Windows.Forms;您可以直接解决它):

  4. this.pictureBox1.MouseDown += new MouseEventHandler(this.pictureBox1_MouseDown);
    
  5. 在这个阶段,所需的就是简单地双击每个菜单项,并按照与任何其他按钮相同的方式完成每次单击事件所需的操作。

这是此操作的基本代码。您可以根据自己的编码习惯进行修改。


很棒的答案!你也可以利用一个if语句:如果(e.Button == MouseButtons.Right) - Nate S.
10
除非此回答发布后有所更改,否则您不需要在代码中手动指定“MouseDown”事件。您只需将“ContextMenuStrip”属性设置为要将其与之关联的控件的正确“ContextMenuStrip”。这样可以省去解决方案中步骤2和3(尽管添加了一个较小的步骤2)。 - Broots Waymb
3
仍然适用于VS2019。 - Cullub
@BrootsWaymb 或许您想编辑答案并添加这个内容? - Cullub

21

如果您使用的是Visual Studio,也有一个图形化界面的解决方案:

  1. 从工具箱中添加ContextMenuStrip
  2. 选择上下文菜单并添加右键单击项目
  3. 对于每个项目,将单击事件设置为相应的功能
  4. 选择将连接右键单击菜单的表单/按钮/图像等任何项目
  5. 将其ContextMenuStrip属性设置为您创建的菜单。

3

刚刚玩弄这个功能时,有一个小技巧是:e.X / e.Y点是相对于控件而言的,因此如果你想给listview或其他类似的控件添加上下文菜单,就需要根据窗体的起始位置来调整它的位置。下面的示例中我在x/y坐标上加了20,使菜单稍稍向右便会出现在光标下方。

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

2

使用Visual Studio非常容易,正如Dorku所说的那样,但我会更加详细地一步步介绍。

  • Goto View->ToolBox

  • Enter "Context" in Search ToolBox

  • Double Click over "ContextMenuStrip" on ToolBox

  • Right click "ContextMenuStrip1" on the form go to properties and rename as you want ex: "ContextMenuStripReports"

  • Right click "ContextMenuStripReports" go to properties and click on ellipsis (...button) and add menu items as below

  • toolStripMenuItem1

  • toolStripMenuItem2

  • Open your yourform.Designer.cs search for toolStripMenuItem1 add below
    this.toolStripMenuItem1.Click += ToolStripMenuItem1_Click;

  • Do the same for toolStripMenuItem2

  • Open yourform.cs

    private void ToolStripMenuItem1_Click(object sender, System.EventArgs e)     
    {    }    
    private void ToolStripMenuItem2_Click(object sender, System.EventArgs e)     
    {    }   
    
  • Right click on form-> propertyies
    set ContextMenuStrip property as ContextMenuStripReports


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接