c# - 如何一次拖放一个文件?
问题描述
我有一个 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);
}
}
解决方案
它不起作用的原因是你在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);
}
推荐阅读
- docker - Linkerd 边车注入
- php - 更好的性能,JOIN 还是多个查询?
- git - Git:提交日期的批量更改
- javascript - 使用 Numeral JS 将任何数字转换为相同的比例
- git - 作为 git 中 master 合并的一部分提交的文件列表
- django - 在 django 的特定日期范围内查询 GET x
- java - Select only a subset of an Entities Collection
- javascript - 如何在 d3.transition 期间正确访问 SVG 元素的转换
- c# - 循环中的 C# System.OverflowException 错误
- android-studio - 如何解决以下 Flutter 项目创建错误?