如何复制ListView中多个选定的项到剪贴板?

7

这段代码适用于单个选择的项目: 在顶部:

ContextMenuStrip menuStrip;

然后在构造函数中:

menuStrip = new ContextMenuStrip();
menuStrip.ItemClicked += menuStrip_ItemClicked;
menuStrip.Items.Add("Cut");
menuStrip.Items.Add("Copy");
menuStrip.Items.Add("Paste");
menuStrip 项目单击事件:
ListViewItem item;
        private void menuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Text == "Copy")
            {
                Clipboard.SetText(item.SubItems[1].Text);

            }
        }

然后是 ListView 的鼠标点击事件:
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);
            }
        }

这段代码适用于单个选定项。

例如,我在ListView中点击一个项目,右键单击该项目并选择Copy:所选项目的子项将被复制到剪贴板。

但现在我想为多个选定项执行相同的操作。

因此,如果我使用Ctrl +左键单击并选择4个项目,并从上下文菜单调用Copy命令,则我希望将所有4个选定项目的子项文本复制到剪贴板中。

例如,我有以下项目:

danny hello world
daniel hi all
dan rain today
daniels sunny day

我选择以下项目:

danny
daniel
dan
daniels

然后右键单击并单击复制。当我从剪贴板中随意粘贴时,我希望它显示:

hello world
hi all
rain today
sunny day

所有选定项目的子项按照相同的顺序和格式。

3个回答

10
首先,您需要启用多选功能:
ListView1.MultiSelect = true;

然后,您可以使用以下代码获取选定的项目:

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

7
    private void listBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.C)
        {
            CopyListBox(listBox1);
        }
    }

    public void CopyListBox(ListBox list)
    {

        StringBuilder sb = new StringBuilder();
        foreach (string item in list.SelectedItems)
        {
            sb.AppendLine(item);
        }

        Clipboard.SetDataObject(sb.ToString());

    }

6

对于ListView来说,代码不应该是ListBox的:

    private void listView1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.C)
        {
            CopyListBox(listView1);
        }
    }
    public void CopyListBox(ListView list)
    {
        StringBuilder sb = new StringBuilder();
        foreach (var item in list.SelectedItems)
        {
            ListViewItem l = item as ListViewItem;
            if (l != null)
                foreach (ListViewItem.ListViewSubItem sub in l.SubItems)
                    sb.Append(sub.Text+"\t");
            sb.AppendLine();
        }
        Clipboard.SetDataObject(sb.ToString());

    }

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