【问题标题】:Why the ContextMenu right mouse click on ListView items is not working?为什么 ContextMenu 鼠标右键单击 ListView 项目不起作用?
【发布时间】: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 属性。它会自己做所有事情——不需要任何代码
  • 为什么你同时使用ContextMenuContextMenuStrip
  • 可能您想将这些项目添加到您的contextmenustrip1 并错误地创建了一个新的ContextMenu。您不需要创建 ContextMenu。只需按照@Plutonix 使用设计器所说的话,或者如果出于任何原因您想使用代码来初始化该ContextMenuStrip,只需在代码中添加一些新的ToolStripMenuItem

标签: c# .net winforms listview contextmenu


【解决方案1】:

您无需执行上述任何操作。只需调用菜单项的Click 事件即可。

首先,将ListView的查看模式设置为Details,然后将ListViewContextMenuStrip属性设置为contextMenuStrip1

ContextMenuStrip

用户右键单击控件时显示的快捷菜单。

因此,对于 Cut 菜单,调用 Click 事件 CutToolStripMenuItem。同样,调用CopyPaste 的事件并添加您的代码。

private void CutToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count != 0)
    {
        foreach (ListViewItem LItem in listView1.SelectedItems)
        {
            //Your code                  
        }
    }
}

                                         

【讨论】:

  • 我需要将项目添加到 contextMenuStrip1 吗?喜欢切?以及如何创建事件 CutToolStripMenuItem_Click ?还是我应该通过代码添加项目并创建事件来完成这一切?
  • @TheLostLostit 希望你能理解这个Image :)
  • 工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2016-03-18
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多