RichTextBox 仅在拖放时插入第一个文件
RichTextBox only inserts first file on Drag&Drop
使用拖放将文件放入 RichTextBox 时,即使拖动了更多文件,也只会插入 1 个文件。我怎样才能改变这种行为?
说明问题的示例表格:
using System.Collections.Specialized;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
RichTextBox rtb;
public Form1()
{
rtb = new System.Windows.Forms.RichTextBox();
rtb.Dock = DockStyle.Fill;
rtb.AllowDrop = true;
Controls.Add(rtb);
rtb.DragEnter += Rtb_DragEnter;
rtb.DragDrop += Rtb_DragDrop;
}
private void Rtb_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void Rtb_DragDrop(object sender, DragEventArgs e)
{
StringCollection sFiles = new StringCollection();
if (e.Data.GetDataPresent("FileDrop"))
{
sFiles.AddRange((string[])e.Data.GetData("FileDrop")); //returns a list of files
Clipboard.Clear();
Clipboard.SetFileDropList(sFiles);
rtb.Paste(DataFormats.GetFormat(DataFormats.FileDrop));
}
}
}
}
这似乎是默认的复制行为。使用[Ctrl]+[v].
也会出现同样的问题
您可以通过一个接一个地粘贴文件来解决这个问题:
private void Rtb_DragDrop(object sender, DragEventArgs e)
{
StringCollection sFiles = new StringCollection();
if (e.Data.GetDataPresent("FileDrop"))
{
foreach (string file in (string[])e.Data.GetData("FileDrop"))
{
Clipboard.Clear();
sFiles.Clear();
sFiles.Add(file);
Clipboard.SetFileDropList(sFiles);
rtb.Paste(); //it's not necessary to specify the format
}
}
}
使用拖放将文件放入 RichTextBox 时,即使拖动了更多文件,也只会插入 1 个文件。我怎样才能改变这种行为?
说明问题的示例表格:
using System.Collections.Specialized;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
RichTextBox rtb;
public Form1()
{
rtb = new System.Windows.Forms.RichTextBox();
rtb.Dock = DockStyle.Fill;
rtb.AllowDrop = true;
Controls.Add(rtb);
rtb.DragEnter += Rtb_DragEnter;
rtb.DragDrop += Rtb_DragDrop;
}
private void Rtb_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void Rtb_DragDrop(object sender, DragEventArgs e)
{
StringCollection sFiles = new StringCollection();
if (e.Data.GetDataPresent("FileDrop"))
{
sFiles.AddRange((string[])e.Data.GetData("FileDrop")); //returns a list of files
Clipboard.Clear();
Clipboard.SetFileDropList(sFiles);
rtb.Paste(DataFormats.GetFormat(DataFormats.FileDrop));
}
}
}
}
这似乎是默认的复制行为。使用[Ctrl]+[v].
也会出现同样的问题您可以通过一个接一个地粘贴文件来解决这个问题:
private void Rtb_DragDrop(object sender, DragEventArgs e)
{
StringCollection sFiles = new StringCollection();
if (e.Data.GetDataPresent("FileDrop"))
{
foreach (string file in (string[])e.Data.GetData("FileDrop"))
{
Clipboard.Clear();
sFiles.Clear();
sFiles.Add(file);
Clipboard.SetFileDropList(sFiles);
rtb.Paste(); //it's not necessary to specify the format
}
}
}