2013-03-11 35 views
1

我在將文件拖放到richTextBox時遇到問題,每當我將文本文件拖動到文本文件上時,它就會變成文本文件的圖片及其名稱在它下面。雙擊該文件並使用系統默認應用程序(即文本文件的記事本等)打開它。基本上它在richTextBox中創建快捷方式,當我希望它讀取文件中的文本時。在此基礎上的代碼,從文件文本將文件拖動到豐富的文本框中以讀取文件中的文本

應該提取到richTextBox1

class DragDropRichTextBox : RichTextBox 
    { 
    public DragDropRichTextBox() 
    { 
     this.AllowDrop = true; 
     this.DragDrop += new DragEventHandler(DragDropRichTextBox_DragDrop); 
    } 

    private void DragDropRichTextBox_DragDrop(object sender, DragEventArgs e) 
    { 
     string[] fileNames = e.Data.GetData(DataFormats.FileDrop) as string[]; 

     if (fileNames != null) 
     { 
      foreach (string name in fileNames) 
      { 
       try 
       { 
        this.AppendText(File.ReadAllText(name) + "\n"); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.Message); 
       } 
      } 
     } 
    } 

如何使這項工作任何想法?

+0

的DragDrop事件RichTextBox的設置屬性EnableAutoDragDrop = FALSE;因爲你在RicHTextBox中獲得了圖標,請在我的答案中按照事件處理程序。它將工作 – 2013-03-11 09:25:44

+0

對不起,將行添加到Designer.cs,它的工作原理,謝謝 – Kazankoph 2013-03-11 09:37:11

+0

作爲回答請 – 2013-03-11 09:40:10

回答

3

在讀入文件之前,您需要檢查draged對象。嘗試下面的代碼。

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      richTextBox1.DragDrop += new DragEventHandler(richTextBox1_DragDrop); 
      richTextBox1.AllowDrop = true; 
     } 

     void richTextBox1_DragDrop(object sender, DragEventArgs e) 
     { 
      object filename = e.Data.GetData("FileDrop"); 
      if (filename != null) 
      { 
       var list = filename as string[]; 

       if (list != null && !string.IsNullOrWhiteSpace(list[0])) 
       { 
        richTextBox1.Clear(); 
        richTextBox1.LoadFile(list[0], RichTextBoxStreamType.PlainText); 
       } 

      } 
     } 
+0

我收到三個錯誤。在這行代碼中有兩個if(e.KeyStates == DragDropKeyStates.ShiftKey)''在'KeyStates'下,另一個在'DragDropKeyStates'下。並使用此代碼'System.Windows.Documents.TextRange範圍;''文件' – Kazankoph 2013-03-11 07:54:49

+0

下'你使用winforms? – JSJ 2013-03-11 08:28:36

+0

在'使用System.Windows.Forms;'是 – Kazankoph 2013-03-11 08:39:33

2

使用這種結合dragEnter事件Designer.cs

this.richTextBox1.AllowDrop = true; this.richTextBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.textBox1_DragDrop); this.richTextBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.textBox1_DragEnter); 

private void textBox1_DragDrop(object sender, DragEventArgs e) 
      { 
       try 
       { 
        Array a = (Array)e.Data.GetData(DataFormats.FileDrop); 
        if (a != null) 
        { 
         string s = a.GetValue(0).ToString(); 
         this.Activate(); 
         OpenFile(s); 
        } 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show("Error in DragDrop function: " + ex.Message); 
       } 

      } 

      private void OpenFile(string sFile) 
      { 
       try 
       { 
        StreamReader StreamReader1 = new StreamReader(sFile); 
        richTextBox1.Text = StreamReader1.ReadToEnd(); 
        StreamReader1.Close(); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(this, ex.Message, "Error loading from file"); 
       } 

      } 

      private void textBox1_DragEnter(object sender, DragEventArgs e) 
      { 
       if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
        e.Effect = DragDropEffects.Copy; 
       else 
        e.Effect = DragDropEffects.None; 

      } 
+0

沒有「AllowDrop」。這是一個豐富的文本框。最近的是「EnableAutoDragDrop」,它已被設置爲true – Kazankoph 2013-03-11 08:02:18

+0

您正在使用txtFileContent拖放,AllowDrop屬性可供TextBox使用。請檢查TextBox的屬性。你的代碼工作正常。唯一需要爲DragEnter寫入事件併爲AllowDrop設置True屬性txtFileContent – 2013-03-11 08:17:18

+0

沒有「AllowDrop」,因爲我說這是一個富文本框。是代碼正在工作,但用於常規文本框。我修改它,因爲我需要它與richTextBox,它不 – Kazankoph 2013-03-11 08:24:50