在列表视图的上下文菜单中实现复制和粘贴
Posted
技术标签:
【中文标题】在列表视图的上下文菜单中实现复制和粘贴【英文标题】:implementing copy and paste in context menu of a listview 【发布时间】:2013-01-17 13:33:33 【问题描述】:我有一个ListView
,它显示了计算机的文件和文件夹。我添加了一个上下文菜单,当右键单击时,它可以复制/粘贴/删除/重命名等。
选择文件后,其路径将保存在字符串中。
现在我该如何剪切并保存到剪贴板。 然后转到一个目录并将文件粘贴到那里。复制和移动到方法似乎不起作用,因为我必须在单独的点击上实现复制和粘贴
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
string ItemClicked = listView1.FocusedItem.Tag.ToString();
if (ItemClicked != string.Empty)
Clipboard.SetFileDropList(ItemClicked);//error
【问题讨论】:
您希望文本被剪切?如复制到剪贴板并从listview
中删除?
不,我想剪切文件,当我转到另一个目录时,我想粘贴该文件
文件的整个路径在ItemClicked字符串中
【参考方案1】:
您需要传入StringCollection
而不是string
。试试这个:
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
if (listView1.SelectedItems.Count > 0)
System.Collections.Specialized.StringCollection sc = new System.Collections.Specialized.StringCollection();
sc.Add(listView1.FocusedItem.Tag.ToString());
Clipboard.SetFileDropList(sc);
请注意,这只会复制到剪贴板。为了按照您的意愿进行剪切,您需要确定这意味着什么:从listview
中删除或从其原始位置删除文件(粘贴后?)
回应cmets:
//public variables
StringCollection copiedFiles = new StringCollection();
bool cutWasSelected;
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
CopySelectedFiles();
cutWasSelected = false;
private void cutToolStripMenuItem_Click(object sender, EventArgs e)
CopySelectedFiles();
cutWasSelected = true;
private void CopySelectedFiles()
if (listView1.SelectedItems.Count > 0)
foreach (ListViewItem item in listView1.SelectedItems)
copiedFiles.Add(item.Tag.ToString());
private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
string destinationFolder;//however you select this
PasteCopiedFiles(destinationFolder, cutWasSelected);
private void PasteCopiedFiles(string DestinationFolder, bool deleteSourceFiles)
if (copiedFiles.Count > 0)
foreach (string file in copiedFiles)
if (deleteSourceFiles)
File.Move(file,Path.Combine(new string[]DestinationFolder,Path.GetFileName(file)));
else
File.Copy(file, Path.Combine(new string[] DestinationFolder, Path.GetFileName(file) ));
【讨论】:
ctrl+v?我认为目的是让用户控制粘贴功能。如果您只想从代码中移动文件,Clipboard
可能不是要走的路。查看静态File
类的方法。
如果你想这样做,我认为你完全可以不使用剪贴板。由于您不希望用户将文件移动到应用程序之外/使用 Windows 资源管理器将其粘贴,因此不要让他们这样做。查看我的更新以上是关于在列表视图的上下文菜单中实现复制和粘贴的主要内容,如果未能解决你的问题,请参考以下文章