如何为listBox中的每个项添加menuStrip菜单?

时间:2015-12-05 23:03:53

标签: c# .net winforms

我想要做的是,当我在listBox中选择一个项目,然后用鼠标右键单击该项目时,它将显示一个菜单,如编辑,复制,剪切,重命名,然后如果我点击例如复制它会做一些事情,如果在编辑别的东西。

我在form1 top中所做的是:

ContextMenuStrip menuStrip;

在构造函数中:

menuStrip = new ContextMenuStrip();
menuStrip.ItemClicked += menuStrip_ItemClicked;
menuStrip.Items.Add("Cut");
menuStrip.Items.Add("Copy");
menuStrip.Items.Add("Paste");

然后在menuStrip_ItemClicked事件中:

ListBox item;
        void menuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            ListView.SelectedListViewItemCollection selectedItems =
           lstDisplayHardware.SelectedItems;
            if (e.ClickedItem.Text == "Copy")
            {
                String text = "";
                foreach (ListViewItem item in selectedItems)
                {
                    text += item.SubItems[1].Text + Environment.NewLine;
                }
                Clipboard.SetText(text);
            }
        }

点击事件:

private void lstDisplayHardware_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                item = lstDisplayHardware.GetItemAt(e.X, e.Y);
                menuStrip.Show(lstDisplayHardware, e.Location);
            }
        }

lstDisplayHardware是我的另一个项目中的listView,在这个项目中应该是listBox1。

问题是我从我的其他项目中拿到了这个例子,我在listView上使用它。但现在我想在listBox上创建它。

也许我应该在这里使用listView?不确定何时使用listView或listBox。在这个项目中,我使用listBox来显示我的YouTube视频列表,所以它只是一个列表字符串。

2 个答案:

答案 0 :(得分:1)

假设您只需要ListBox中的单个值...

void menuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    if(item != null && item.SelectedIndex > -1)
    {
        Clipboard.SetText(item.Items[item.SelectedIndex].ToString());
    }
}

答案 1 :(得分:1)

我想你忘了将上下文菜单绑定到ListBox了!? 将项目添加到上下文菜单后尝试此操作:

listBox1.ContextMenuStrip = menuStrip;