首页 > 解决方案 > 如何一次拖放一个文件?

问题描述

我有一个 WinForms 应用程序,允许用户将图像拖放到面板上。现在,他们需要同时删除两个文件才能同时添加它们。如果他们删除了一个,然后又想添加另一个,它只会覆盖第一个文件。

我想让他们一次删除一个文件,并在不覆盖它们的情况下添加任意数量的文件。

private void Panel1_DragEnter(object sender, DragEventArgs e)
{
   if (e.Data.GetDataPresent(DataFormats.FileDrop))
      e.Effect = DragDropEffects.Copy;
}

string[] files;
private void Panel1_DragDrop(object sender, DragEventArgs e)
{
   files = (string[])e.Data.GetData(DataFormats.FileDrop);
   foreach (string file in files)
   {
      Console.WriteLine(files.Length);
   }
}

标签: c#winformsdrag-and-drop

解决方案


它不起作用的原因是你在files每次DragDrop提出时都会扔掉任何东西。List<string>您应该使用(或HashSet<string>忽略重复项),而不是使用数组。

这是一个例子:

List<string> files = new List<string>();
private void Panel1_DragDrop(object sender, DragEventArgs e)
{
    files.AddRange((string[])e.Data.GetData(DataFormats.FileDrop));
    Console.WriteLine(files.Count);
}

或者使用 HashSet:

HashSet<string> files = new HashSet<string>();
private void Panel1_DragDrop(object sender, DragEventArgs e)
{
    files.UnionWith((string[])e.Data.GetData(DataFormats.FileDrop));
    Console.WriteLine(files.Count);
}

推荐阅读