2011-08-25 2 views
11

WindowsエクスプローラからListBoxにファイルをドラッグするC#コードの開発に成功しました。WindowsエクスプローラからC#のlistBoxにフォルダをドラッグアンドドロップする

// Drag and Drop Files to Listbox 
    private void listBox1_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop, false)) 
      e.Effect = DragDropEffects.All; 
     else 
      e.Effect = DragDropEffects.None; 
    } 

    private void listBox1_DragDrop(object sender, DragEventArgs e) 
    { 
     string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); 
     foreach (string fileName in files) 
     { 
      listBox1.Items.Add(fileName); 
     } 
    } 

リストボックスにフォルダをドラッグすると、リストボックスに追加するフォルダ内のすべてのファイルが表示されます。

上記のタスクのコードスニペットを誰かが私に提供できるのであれば、非常に役に立ちます。

ありがとうございます。

答えて

2

fileNameは、すべてのファイル(とサブディレクトリ)を介してDirectoryInfoオブジェクトとループを作成できるディレクトリであれば

あなたは、このコードを見て持つことができます。

http://weblogs.asp.net/israelio/archive/2004/06/23/162913.aspx

を(あなたがいけない必要DirectoryInfoオブジェクトを使用するには、Directoryクラスの静的メソッドを使用することもできます

12

DragEnterのコードフォルダに適用されます。

DragDropイベントでは、同じ方法でファイルパスとフォルダパスを取得します。ファイルとフォルダの組み合わせをドラッグすると、すべてがfiles配列に表示されます。パスがフォルダであるかどうかを判断するだけです。

次のコードは、削除されたすべてのフォルダのルートからすべてのファイルのすべてのパスを取得し、すべてのファイルのパスを削除します。

private void listBox1_DragDrop(object sender, DragEventArgs e) 
    { 
     List<string> filepaths = new List<string>(); 
     foreach (var s in (string[])e.Data.GetData(DataFormats.FileDrop, false)) 
     { 
      if (Directory.Exists(s)) 
      { 
       //Add files from folder 
       filepaths.AddRange(Directory.GetFiles(s)); 
      } 
      else 
      { 
       //Add filepath 
       filepaths.Add(s); 
      } 
     } 
    } 

削除されたフォルダのルートにあるファイルのみが収集されることに注意してください。フォルダツリー内のすべてのファイルを取得する必要がある場合は、すべてを収集するために少し再帰を行う必要があります。

関連する問題