2015-05-13 27 views
2

此代碼工作一個單一選擇的項目: 在頂部如何將剪貼板複製到ListView的多個選定項目?在構造</p> <pre><code>ContextMenuStrip menuStrip; </code></pre> <p>然後::

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

menuStrip itemclicked事件:

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個選定項目文本的所有子項都複製到剪貼板中。

例如,我有以下項目:

丹尼的hello world
丹尼爾大家好
丹今天下雨
丹尼爾斯晴天

我選擇的項目:

丹尼
daniel
dan
daniels

然後右鍵單擊並單擊複製。 當我paste從我想讓它顯示剪貼板上的任何地方:

的hello world
大家好
今天下雨
晴天

所有所選項目的在同一順序的子項和格式。

回答

4

首先,您必須啓用多選:與

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); 
    } 
} 
3
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()); 

    } 
0

對於ListView控件,而不是列表框代碼將是:

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()); 

    } 
相關問題