2013-05-01 29 views
5

下面是我的代碼如何在TreeView中顯示目錄?

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\Shahul\Documents\Visual Studio 2010\Projects\TreeView\TreeView\bin\FileExplorer"); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    if (Directory.Exists("FileExplorer")) 
    { 
     try 
     { 
      DirectoryInfo[] directories = directoryInfo.GetDirectories(); 

      foreach (FileInfo file in directoryInfo.GetFiles()) 
      { 
       if (file.Exists) 
       { 
        TreeNode nodes = treeView.Nodes[0].Nodes.Add(file.Name); 
       } 
      } 

      if (directories.Length > 0) 
      { 
       foreach (DirectoryInfo directory in directories) 
       { 
        TreeNode node = treeView.Nodes[0].Nodes.Add(directory.Name); 
        node.ImageIndex = node.SelectedImageIndex = 0; 
        foreach (FileInfo file in directory.GetFiles()) 
        { 
         if (file.Exists) 
         { 
          TreeNode nodes = treeView.Nodes[0].Nodes[node.Index].Nodes.Add(file.Name); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 

當我跑我只是得到了一個空白樹狀形式?無法弄清楚什麼是錯誤?

順便說一句,這是我在Stack Overflow中的第一篇文章。

+0

我複製你的代碼,它似乎是工作在我結束。 (除了因爲訪問權限而導致某些文件夾無法讀取的警告)順便說一句,嘗試使這個函數成爲一個遞歸的函數來添加節點和什麼。可以讓你更清楚地瞭解正在發生的事情以及你的錯誤可能在哪裏。 此外,你正在設置一個變量節點,你什麼都不做(TreeNode節點被賦值但未被使用)。 – 2013-05-01 08:57:56

+0

調試並確保樹在函數返回之前確實包含元素。也許你正在將節點添加到錯誤的樹中。也許這棵樹在之後直接被清除。調試。 – SimpleVar 2013-05-01 09:01:17

回答

6

這應該解決您的問題,我想在WinForm的,但:

public Form1() 
    { 
     InitializeComponent(); 

     DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\hikuma\Documents\IR"); 
     if (directoryInfo.Exists) 
     { 
      treeView1.AfterSelect += treeView1_AfterSelect; 
      BuildTree(directoryInfo, treeView1.Nodes); 
     } 
    } 

    private void BuildTree(DirectoryInfo directoryInfo, TreeNodeCollection addInMe) 
    { 
     TreeNode curNode = addInMe.Add(directoryInfo.Name); 

     foreach (FileInfo file in directoryInfo.GetFiles()) 
     { 
      curNode.Nodes.Add(file.FullName, file.Name); 
     } 
     foreach (DirectoryInfo subdir in directoryInfo.GetDirectories()) 
     { 
      BuildTree(subdir, curNode.Nodes); 
     } 
    } 

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
    { 
     if(e.Node.Name.EndsWith("txt")) 
     { 
      this.richTextBox1.Clear(); 
      StreamReader reader = new StreamReader(e.Node.Name); 
      this.richTextBox1.Text = reader.ReadToEnd(); 
      reader.Close(); 
     } 
    } 

它是如何可以打開豐富的文本框文件一個簡單的例子,它可以改善很多:)。 你可能想標記爲答案或投票,如果它幫助:)!

+0

非常感謝它解決了這個問題。另一個快速幫助如何顯示內容到豐富的文本框,即讓我說我的treeview文件夾結構下我有一些記事本文件,當我選擇任何記事本或雙擊它應顯示內容到richtext框... – 2013-05-01 09:24:28

+0

謝謝你你的幫助,我只是將你的代碼粘貼在我編寫的表單上,沒有任何問題。但是,當我點擊我的文本文件顯示在我的樹視圖結構沒有任何顯示在richtextbox。我的文本文件中有一些內容 – 2013-05-01 10:25:05

+0

在表單上添加一個富文本框,它將在文本框中顯示文件內容... – 2013-05-01 10:34:09

0

試試這個:(注意:請確保您的DirectoryInfo位置包含一些文件夾)

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\Shahul\Documents\Visual Studio 2010\Projects\TreeView\TreeView\bin\FileExplorer"); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    if (directoryInfo.Exists) 
    { 
     try 
     { 
      treeView.Nodes.Add(directoryInfo.Name); 
      DirectoryInfo[] directories = directoryInfo.GetDirectories(); 

      foreach (FileInfo file in directoryInfo.GetFiles()) 
      { 
       if (file.Exists) 
       { 
        TreeNode nodes = treeView.Nodes[0].Nodes.Add(file.Name); 
       } 
      } 


      if (directories.Length > 0) 
      { 
       foreach (DirectoryInfo directory in directories) 
       { 
        TreeNode node = treeView.Nodes[0].Nodes.Add(directory.Name); 
        node.ImageIndex = node.SelectedImageIndex = 0; 
        foreach (FileInfo file in directory.GetFiles()) 
        { 
         if (file.Exists) 
         { 
          TreeNode nodes = treeView.Nodes[0].Nodes[node.Index].Nodes.Add(file.Name); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 
+0

我只是試過你的代碼,我仍然有同樣的問題.. – 2013-05-01 09:15:32

0

DirectoryInfo.Exists( 「FileExplorer」)將檢查「C:\用戶\ Shahul \文檔\ Visual Studio 2010的\當您在調試模式下運行時,「Projects \ TreeView \ TreeView \ bin \ debug \ FileExplorer」,而不是「C:\ Users \ Shahul \ Documents \ Visual Studio 2010 \ Projects \ TreeView \ TreeView \ bin \ FileExplorer」。

0

嘗試以下操作:

private void Form1_Load(object sender, EventArgs e) 
    { 
     if (directoryInfo.Exists) 
     { 
      try 
      { 
       treeView.Nodes.Add(LoadDirectory(directoryInfo));      
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

    private TreeNode LoadDirectory(DirectoryInfo di) 
    { 
     if (!di.Exists) 
      return null; 

     TreeNode output = new TreeNode(di.Name, 0, 0); 

     foreach (var subDir in di.GetDirectories()) 
     { 
      try 
      { 
       output.Nodes.Add(LoadDirectory(subDir)); 
      } 
      catch (IOException ex) 
      { 
       //handle error 
      } 
      catch { } 
     } 

     foreach (var file in di.GetFiles()) 
     { 
      if (file.Exists) 
      { 
       output.Nodes.Add(file.Name); 
      } 
     } 

     return output; 
    } 
} 

這是更好地打出解析成一個遞歸方法的目錄,這樣就可以一路走下來的樹。

這將阻止用戶界面,直到它完全加載 - 但固定,超出這個答案的範圍...

:)

+0

謝謝你的幫助:-)我知道它是固定的 – 2013-05-01 09:53:26

+0

沒有probs!將來,請確保您告訴我們您是否使用winforms/WPF,因爲它們處理事情的方式不同。 – Chemass 2013-05-01 10:37:32

+0

好的,確定...... – 2013-05-01 10:43:30