如何一次拖放一个文件?
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);
}
我有一个 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);
}