【发布时间】:2016-09-04 18:21:03
【问题描述】:
在form1的顶部:
private ContextMenuStrip contextmenustrip1 = new ContextMenuStrip();
然后:
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
ListView listView = sender as ListView;
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
ListViewItem item = listView.GetItemAt(e.X, e.Y);
if (item != null)
{
item.Selected = true;
contextmenustrip1.Show(listView, e.Location);
}
}
ContextMenu contextMenu = new System.Windows.Forms.ContextMenu();
MenuItem menuItem = new MenuItem("Cut");
menuItem.Click += new EventHandler(CutAction);
contextMenu.MenuItems.Add(menuItem);
menuItem = new MenuItem("Copy");
menuItem.Click += new EventHandler(CopyAction);
contextMenu.MenuItems.Add(menuItem);
menuItem = new MenuItem("Paste");
menuItem.Click += new EventHandler(PasteAction);
contextMenu.MenuItems.Add(menuItem);
}
}
当我使用断点单击项目时,它会到达事件,但鼠标右键单击不起作用,但可以肯定它没有显示剪切复制粘贴菜单。
我想这样做,当我右键单击 listView 中的项目时,它将显示当前项目的菜单。不确定我是否应该首先进行 mousedown 或其他一些事件,不确定还有什么逻辑。但想法是每次鼠标右键单击项目时都会显示菜单。
【问题讨论】:
-
在表单设计器中创建/设计菜单并将其分配给列表视图的 ContextMenuStrip 属性。它会自己做所有事情——不需要任何代码
-
为什么你同时使用
ContextMenu和ContextMenuStrip? -
可能您想将这些项目添加到您的
contextmenustrip1并错误地创建了一个新的ContextMenu。您不需要创建ContextMenu。只需按照@Plutonix 使用设计器所说的话,或者如果出于任何原因您想使用代码来初始化该ContextMenuStrip,只需在代码中添加一些新的ToolStripMenuItem。
标签: c# .net winforms listview contextmenu