2016-04-14 27 views
0

Dosyaları bir RichTextBox'a sürüklerken & Sürüklemeyi bırakın Daha fazla dosya sürüklenmiş olsa bile yalnızca 1 dosya eklenir. Davranışı nasıl değiştirebilirim? sorunu göstermektedirRichTextBox sadece ilk dosyayı Sürükle ve Bırak'a ekler


örnek form,:

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

cevap

0

Bu varsayılan kopya davranış gibi görünüyor. [Ctrl] + [v] kullanırken aynı sorun oluşur.

Sen birbiri ardına dosya yapıştırarak o çalışabilirsiniz:

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 
     } 
    } 
}