Hallo,
es geht um die Darstellung von Suchergebnissen (Dateipfade) in einem TreeView-Control. Dabei soll das in etwa wie ein Dateiexplorer sein. Die Suchergebnisse untergeordnet darzustellen ist auch kein Problem. Schwierigkeiten macht es Nodes an bereits vorhandenenen Nodes anzuhängen.
Das Suchprogramm gibt eine Liste mit Dateipfaden in diesem Format aus:
E:\Eigene Dateien\My Music\musik.mp3
E:\Eigene Dateien\My Music\nocheinemusikdatei.mp3
E:\Programme\irgendwas\datei.txt
E:\Downloads\doktorarbeit.doc
Diese Suchergebnisse möchte ich in einem TreeView darstellen. Das Schwierigste dabei ist, dass beispielsweise nocheinemusikdatei bei My Music mit angehängt wird. Bis jetzt sieht es bei mir so aus:
Imageshack - treeview.png
Der Code dazu sieht so aus:
namespace Baumstruktur
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FillTreeView(treeView1, @"E:\Eigene Dateien\Visual Studio 2008\Settings\datei.exe");
FillTreeView(treeView1, @"E:\Eigene Dateien\Visual Studio 2008\Olaf\datei2.exe");
}
private void FillTreeNode(TreeNode parentNode, string[] splittedPath, int Level, int MaxLevel, TreeView tvw)
{
// Wenn der Knoten noch leer ist soll der erste String eingfügt werden
if (parentNode.Text == "" && Level == 0)
{
parentNode.Text = splittedPath[Level];
parentNode.Name = splittedPath[Level];
}
TreeNode[] result = tvw.Nodes.Find(parentNode.Text, true);
if (result.Length == 0) // Ausführen wenn der Eintrag noch nicht vorhanden ist
{
if (Level > 0)
{
TreeNode[] resultPreviousNode = tvw.Nodes.Find(splittedPath[Level - 1], true);
if (resultPreviousNode.Length == 0)
{
TreeNode subNode = new TreeNode(splittedPath[Level]);
subNode.Name = splittedPath[Level];
parentNode.Nodes.Add(subNode);
if (Level < (MaxLevel - 1))
FillTreeNode(subNode, splittedPath, Level + 1, MaxLevel, tvw);
}
else
{
resultPreviousNode[0].Nodes.Add(parentNode);
if (Level < (MaxLevel - 1))
{
TreeNode subNode = new TreeNode(splittedPath[Level + 1]);
FillTreeNode(subNode, splittedPath, Level + 1, MaxLevel, tvw);
}
}
}
else
{
if (Level < (MaxLevel - 1))
FillTreeNode(parentNode, splittedPath, Level + 1, MaxLevel, tvw);
}
}
else
{
if (Level < (MaxLevel - 1))
if ((Level + 1) == MaxLevel)
{
FillTreeNode(parentNode, splittedPath, Level + 1, MaxLevel, tvw);
}
else
{
parentNode.Name = splittedPath[Level+1];
parentNode.Text = splittedPath[Level+1];
FillTreeNode(parentNode, splittedPath, Level + 1, MaxLevel, tvw);
}
}
}
public void FillTreeView(TreeView tvw, string path)
{
string[] pathSplitted = path.Split('\\');
TreeNode dummy = new TreeNode();
FillTreeNode(dummy, pathSplitted, 0, pathSplitted.Count(), tvw);
tvw.Nodes.Add(dummy);
}
}
}
Ich bin für jede Hilfe dankbar!!