Thema Datum  Von Nutzer Rating
Antwort
Rot TreeView Windows Explorerstruktur
29.03.2011 20:47:06 partywelt
Solved
30.03.2011 15:17:47 Gast45309
NotSolved
30.03.2011 22:48:35 Gast80243
NotSolved
30.03.2011 23:27:40 partywelt
NotSolved
31.03.2011 20:23:30 Gast42765
NotSolved
31.03.2011 20:55:20 partywelt
NotSolved
31.03.2011 21:02:47 Gast10495
NotSolved
02.04.2011 23:17:04 partywelt
NotSolved
03.04.2011 10:15:33 Tom
NotSolved
04.04.2011 20:39:43 partywelt
NotSolved
15.04.2011 14:56:11 Gast81756
NotSolved

Ansicht des Beitrags:
Von:
partywelt
Datum:
29.03.2011 20:47:06
Views:
4246
Rating: Antwort:
 Nein
Thema:
TreeView Windows Explorerstruktur

Hallo zusammen,

ich bin dabei ein Backup Programm zu schreiben. Ich erstelle einen Auftrag in dem ich eine TreeView habe, der wie ein Explorerbaum aufgebaut ist. Dort kann ich die Quellen auswählen indem ich die entsprechenden Verzeichnisse und Dateien checke. In einer 2. TreeView wähle ich dann das Ziel aus. Diese Daten werden mit ein paar anderen Daten (Auftragsname, Ausführungszeitpunkt- und Häufigkeit) in eine XML Datei gespeichert. Also nach dem Motto

<TaskID = 1>

<Source>Ordner 1</Source>

<Source>Ordner 2</Source>

<Destination>Zielordner</Destination>

...

 

Diese XML lese ich dann in ein ListView ein. Aus dem ich dann mehrere Möglichkeiten haben. Auftrag ausführen, Auftrag löschen und Auftrag bearbeiten. Da liegt mein Problem. Ich möchte beim bearbeiten wieder einen TreeView angezeigt bekommen, in dem der TreeView aufgebaut wird und mit die Quellen checkt. Außerdem sollen auch alle anderen Ordner (überordner) bis zur Quelle angezeigt werden (nicht gecheckt). Ich übergebe die Quellen über einen String z.b "D:\Eigene Bilder\Urlaub|D:\Eigene Bilder\Party|D:\Eigene Musik" (durch pipes getrennt)

Ich habe es schon hinbekommen, dass er mit die ausgewählten Quellen in einen TreeView ausgibt und checkt (siehe Code). Nun möchte ich aber z.b. bei einer Quelle D:\Eigene Bilder\Urlaub alle Ordner und Dateien in D:\ zum TreeView hinzufügt, den Node Eigene Bilder ausklappt, dann mir alle Ordner und Dateien im Node Eigene Bilder anzeigt und den Ordner Urlaub Urlaub checkt. So auch mit den anderen Quellen.

Das ganze muss wohl mit einen Directory.GetDirectories bzw. GetFiles machbar sein. Nur an den stellen wo ich das eingefügt habe (innerhalb der Schleife in der die Quellen ausgelesen werden) werden mir die gesamten Nodes mehrfach hinzugefügt (wenn mehrere Quellen). Ich hab den unten genannten Code aus einem anderen Forum, in dem mir nicht weitergeholfen wurde, da werden Hashtables verwendet, die eigentlich dafür sorgen sollen, dass Nodes nicht doppelt hinzugefügt werden, da ich keine Ahnung von Hashtables habe und den Code nicht ganz blicke, erschwert dies mich ein wenig. Könntet Ihr mit Hilfestellung geben. Vllt eine Alternative von Hashtables. Ich benutze .Net Framework 4.

Hier mein Code. Vielen Dank

 

 private void test(TreeNode parentNode, String NodeSource)
    {
      //Hashtable erzeugen
      Hashtable dictNode = new Hashtable();

      //Hier liegen die String in Form "D:\Eigene Bilder\Urlaub|D:\Musik\Internet|D:\Musik\Alben" per | getreent
      string[] sources = NodeSource.Split('|');
      foreach (string readDir in sources)
      {
        //Ausgelesene Zeile bei "\" splitten:
        string[] splittedPath = readDir.Split('\\');

        string strBegin = "";

        parentNode = null;

        foreach (string pathSplitter in splittedPath)
        {
          //Wenn das Element leer ist, abbrechen
          if (pathSplitter == "")
          {
            break;
          }

          //strBegin += "\\" + pathSplitter;
          strBegin += pathSplitter+ "\\";

          if (dictNode.ContainsKey(strBegin))
          {
            parentNode = (TreeNode)dictNode[strBegin];
            continue;
          }

          dictNode[strBegin] = new TreeNode(pathSplitter);

          if (parentNode == null)
          {
            this.treeView1.Nodes.Add((TreeNode)dictNode[strBegin]);
          }
          else
          {
            //MessageBox.Show(parentNode.FullPath);

            parentNode.Nodes.Add((TreeNode)dictNode[strBegin]);
            parentNode.Expand();

            //Ausgewählten Node checken
            if (((TreeNode)dictNode[strBegin]).FullPath == readDir)
            {
              ((TreeNode)dictNode[strBegin]).Checked = true;
            }

          }
          parentNode = (TreeNode)dictNode[strBegin];
        }
      }
    }

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot TreeView Windows Explorerstruktur
29.03.2011 20:47:06 partywelt
Solved
30.03.2011 15:17:47 Gast45309
NotSolved
30.03.2011 22:48:35 Gast80243
NotSolved
30.03.2011 23:27:40 partywelt
NotSolved
31.03.2011 20:23:30 Gast42765
NotSolved
31.03.2011 20:55:20 partywelt
NotSolved
31.03.2011 21:02:47 Gast10495
NotSolved
02.04.2011 23:17:04 partywelt
NotSolved
03.04.2011 10:15:33 Tom
NotSolved
04.04.2011 20:39:43 partywelt
NotSolved
15.04.2011 14:56:11 Gast81756
NotSolved