RichTextBox仅在Drag& Drop上插入第一个文件

时间:2016-04-14 12:02:33

标签: c# winforms drag-and-drop richtextbox

使用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));
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这似乎是默认的复制行为。使用[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
        }
    }
}