我想要做的是,当我在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视频列表,所以它只是一个列表字符串。
答案 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;