2013-05-01 11 views
5

Unten ist mein CodeWie Verzeichnisse in einem TreeView angezeigt werden?

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

Wenn ich laufen bekomme ich nur eine leere treeview Form? Kann nicht herausfinden, was der Fehler ist?

Btw das meine erste Post in Stack Overflow.

+0

ich Ihren Code kopiert und es scheint an meinem Ende zu arbeiten. (Neben Warnungen über bestimmte Ordner, die aufgrund von Zugriffsrechten nicht lesbar sind) Versuchen Sie übrigens, diese Funktion in eine rekursive Funktion zum Hinzufügen der Knoten und so weiter zu verwandeln. Könnte Ihnen bessere Klarheit geben, was passiert und wo Ihr Fehler sein könnte. Sie setzen auch eine Variable Knoten, mit denen Sie nichts tun (TreeNode Knoten wird zugewiesen, wird aber nicht verwendet). –

+0

Debuggen Sie und stellen Sie sicher, dass die Struktur Elemente enthält, bevor die Funktion zurückkehrt. Vielleicht fügen Sie dem falschen Baum Knoten hinzu. Vielleicht wird der Baum direkt danach irgendwo geräumt. Debuggen. – SimpleVar

Antwort

6

Dies sollte Ihr Problem zu lösen, habe ich versucht, auf WinForm aber:

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

Es ist ein einfaches Beispiel, wie Sie Datei in Rich-Text-Box öffnen können, kann es eine Menge :) verbessert werden. Vielleicht möchten Sie als Antwort markieren oder stimmen, wenn es geholfen hat :) !!

+0

vielen Dank es das Problem gelöst. Eine weitere schnelle Hilfe Wie zeige ich den Inhalt in Rich-Text-Box, dh sagen wir unter meiner Treeview-Ordner-Struktur Ich habe einige Notizblock-Dateien in dem Moment, wenn ich einen Notizblock auswähle oder Doppelklick sollte den Inhalt in Rich Text-Box anzeigen ... –

+0

Vielen Dank für Ihre Hilfe, ich habe gerade Ihren Code auf mein Formular eingefügt, das es ohne Probleme kompiliert. Wenn ich jedoch auf meine Textdatei klicke, die in meiner Baumstruktur angezeigt wird, wird nichts in der richtextbox angezeigt. Ich habe einige Inhalte in meiner Textdatei –

+0

Fügen Sie ein Rich-Text-Feld auf Ihrem Formular und es wird Dateiinhalt in Ihrem Textfeld angezeigt ... –

0

Versuchen Sie folgendes: (beachten Sie sicherstellen, dass Ihre Directory Standort einige Ordner enthält)

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

Ich habe gerade versucht, Ihren Code immer noch ich habe das gleiche Problem .. –

0

DirectoryInfo.Exists ("File Explorer") für „C überprüfen: \ Benutzer \ Shahul \ Dokumente \ Visual Studio 2010 \ Projekte \ TreeView \ TreeView \ bin \ debug \ FileExplorer ", nicht" C: \ Benutzer \ Shahul \ Documents \ Visual Studio 2010 \ Projekte \ TreeView \ TreeView \ bin \ FileExplorer ", wenn Sie im Debug-Modus arbeiten.

0

Versuchen Sie Folgendes:

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

Es ist besser, das Verzeichnis in eine rekursive Methode Parsen zu spalten, so dass Sie den ganzen Weg hinunter den Baum gehen kann.

Dies wird die UI blockiert, bis es vollständig geladen ist - aber Fixierung, die über den Rahmen dieser Antwort ist ...

:)

+0

Vielen Dank für die Hilfe :-) Ich habe es behoben –

+0

Keine probs! Stellen Sie in Zukunft sicher, dass Sie uns wissen lassen, wenn Sie mit winforms/WPF arbeiten, da sie die Dinge anders handhaben. – Chemass

+0

Okay sicher ...... –

Verwandte Themen