0

ListViewコンピューターのファイルとフォルダーを表示するがあります。右クリックすると、コピー/貼り付け/削除/名前の変更などができるコンテキストメニューを追加しました。ファイルを選択すると、そのパスが文字列に保存されます。

それを切り取ってクリップボードに保存するにはどうすればよいですか。次に、ディレクトリに移動して、そこにファイルを貼り付けます。コピーと貼り付けを別々のクリックで実装する必要があるため、コピーとメソッドへの移動が機能しないようです

 private void copyToolStripMenuItem_Click(object sender, EventArgs e)
 {
     string ItemClicked = listView1.FocusedItem.Tag.ToString();
     if (ItemClicked != string.Empty)
     {
         Clipboard.SetFileDropList(ItemClicked);//error
     }
}
4

1 に答える 1

2

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か、元の場所からファイルを削除します(貼り付け後?)


コメントに応えて:

//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) }));
            }
        }
    }
}
于 2013-01-17T14:07:17.807 に答える