2012-03-02 12 views
0

私のWinformsアプリケーションでは、特定のプロジェクトのすべてのフォルダを表示するためにツリービューを作成しましたが、これはうまくいきますが、フォルダに保存されているPDFファイルも見たいと思っています。C#PDFファイルでtreeviewを埋め込む

私は特定のプロジェクトのフォルダ構造を取得するために私のコードを使用します。

void PopulateTree() 
    { 
     //Getting the correct location for the project 
      TreeNode rootnode = new TreeNode(@"Z:\Projecten\" + slctJaarBox.Text + "\\" + slctProjectBox.Text); 
      treeView1.Nodes.Add(rootnode); 
      FillChildNodes(rootnode); 
      treeView1.Nodes[0].Expand(); 

    } 


    void FillChildNodes(TreeNode node) 
    { 
     //Creates the nodes for the folder structure on root level 
     try 
     { 
      FileInfo files = new FileInfo(node.FullPath); 

      DirectoryInfo dirs = new DirectoryInfo(node.FullPath); 
      foreach (DirectoryInfo dir in dirs.GetDirectories()) 
      { 
       TreeNode newnode = new TreeNode(dir.Name); 
       node.Nodes.Add(newnode); 
       newnode.Nodes.Add("*"); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 
    } 

    private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) 
    { 
     //Will only load and add a node subdirectorys if a node is expanded, 
     //this is for faster loading 
     if (e.Node.Nodes[0].Text == "*") 
     { 
      e.Node.Nodes.Clear(); 
      FillChildNodes(e.Node); 
     } 
    } 

これはうまくいきました。それは確かに最良の方法ではありません。

void FillChildNodes(TreeNode node) 
    { 
     try 
     { 

      DirectoryInfo dirs = new DirectoryInfo(node.FullPath); 
      foreach (DirectoryInfo dir in dirs.GetDirectories()) 
      { 
       TreeNode newnode = new TreeNode(dir.Name); 
       node.Nodes.Add(newnode); 
       newnode.Nodes.Add("*"); 

      } 

      FileInfo[] arrFilesInFolder = null; 
      FileInfo bestandInFolder = null; 

      arrFilesInFolder = dirs.GetFiles("*.pdf"); 
      foreach (FileInfo fileInFolder_loopVariable in arrFilesInFolder) 
      { 
       bestandInFolder = fileInFolder_loopVariable; 
       TreeNode newnode = new TreeNode(bestandInFolder.Name); 
       node.Nodes.Add(newnode); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 
    } 
+0

あなたの問題は何ですか?あなたは何を試しましたか?それはどこで失敗したのですか?どのように失敗したのですか? –

+0

私の問題は、pdfファイルに対して同じことをやって、フォルダ構造を作っていますが、ファイルに対してこれを実行して正しいノードに配置する方法をまだ見つけていませんでした。 – PandaNL

+0

それは働いて、anwserと私の質問を編集しました。 – PandaNL

答えて

1

ここでは、私がそれを行う方法の例を示します。あなたのコードとまったく同じことをするわけではありません。私はそれがより直感的だと感じたがそれはあなたが

public TreeNode[] CreateChildNodes(){ 
     return (from directory in Directory.GetDirectories(node.FullPath) 
      let directoryName = Path.GetDirectoryName(directory) 
      let pdfFiles = from file in Directory.GetFiles(directory,"*.pdf") 
          select new TreeNode(Path.GetFileName(file)) 
      select new TreeNode(directoryName,pdfFiles.ToArray()).ToArray(); 
} 

数を探している機能だ場合、バックあなたが持っているものに、それを変更することは困難にすべきではないので、私は、ディレクトリへのサブノードとしてファイルノードを入れています注意すべきこと。あなたはファイルとディレクトリの名前だけを使用しているので、DirectoryInfoやFileInfoオブジェクトをインスタンス化することは考えていないので、単純にパス/文字列を使用するように変更しました。私はまた、このようなヘルパー関数をsideeffectフリーにするのが好きです。なぜなら、あなたのバージョンで渡されたノードにノードを添付するのではなく、ノードのコレクションを返すのです(node.Nodes.AddRangeを呼び出して、なぜメソッドが配列を返し、IEnumerableを返さないのですか)

関連する問題