如何一次拖放一个文件?

How to drag and drop one file at the time?

我有一个 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);
   }
}

它不起作用的原因是每次引发 DragDrop 时,您都会丢弃 files 中的任何内容。您应该使用 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<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);
}