tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
1182
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    partywelt partywelt ist offline Grünschnabel
    Registriert seit
    Mar 2011
    Beiträge
    2
    Hallo zusammen, ich habe ein Problem. Ich bin dabei ein Backup Programm zu programmieren. Ich erstelle einen Auftrag, den ich in einer XML Datei speichere. Den Auftrag erstelle ich mit TreeViews, in der ich eine Art Windows Explorer erstelle - Dies funktioniert auch ohne Probleme.

    Mein Problem ist nun wenn ich diesen Auftrag bearbeiten will und ich mehrere Quellen angegeben habe. Übergebe die Quellen in einem String z.B "D:\\Eigene Bilder\Urlaub|D:\\Eigene Bilder\Familie".

    Dann lasse ich mir meinen TreeView aufbauen. Mit einer Quelle funktioniert das wunderbar. Sobald ich aber mehrere Quellen habe baut er mir den Node Eigene Bilder 2 mal auf (oder mehrmals, je nach dem wie oft der Ordner vorkommt)

    Beispiel:
    C:\
    D:\
    Eigene Dokumente\
    Eigene Musik\
    Eigene Bilder\
    Fotos\
    Arbeit\
    Urlaub\ (wird gecheckt)
    Familie\
    Fotos\
    Arbeit\
    Urlaub\
    Familie\ (wird gecheckt)
    ...

    Habe schon versucht abzufragen ob der Node schon existiert, trotzdem krieg ich es nicht hin.

    Hier ist mein Code, vielleicht habt ihr eine ganz andere Idee wie ich den TreeView aufbauen kann:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    
    public Form3(werte)
    {
        drives_Src(source); (ruft Funktion zum Aufbau des TreeViews auf)
    }
     
    private void drives_Src(String source)
            {
                TreeNode node = new TreeNode();
                foreach (string drive in Directory.GetLogicalDrives())
                {
                    try
                    {
                        node = treeView1.Nodes.Add(drive);
     
    //prüfen ob auf einer Festplatte mehrere Quellen vorhanden sind
                        string NodeSrc = "";
                        Boolean fehler = true;
                        string NodeSource = "";
                        string[] sources = source.Split('|');
                        foreach (string strSource in sources)
                        {
                            string[] strNode = strSource.Split('\\');
                            string NodeSrctemp = strNode[0] + "\\";
                            if (drive == NodeSrctemp)
                            {
                                if (NodeSrctemp == NodeSrc)
                                {
                                    NodeSource = NodeSource + "|" + strSource;
                                    fehler = false;
                                }
                                else
                                {
                                    NodeSrc = NodeSrctemp;
                                    NodeSource = strSource;
                                    fehler = false;
                                }
                            }
                        }
                        if (fehler == false)
                        {
                            eNode_Src(node.FullPath, node, NodeSource, true);
                            node.Expand();
                        }
                        else
                        {
                            //Dummynodes einfügen
                            TreeNode dummy = new TreeNode();
                            dummy = node.Nodes.Add("");
                            dummy.ImageKey = "folder";
                        }
                    }
                    catch { }
                }
            } //Ende drives_Src()
     
    // Bestehende Quellen anzeigen
            private void eNode_Src(String Src, TreeNode node, String arrSrc, Boolean fehler)
            {
                try
                {
                    //node.Nodes.Clear();
                    foreach (string dir in Directory.GetDirectories(Src)) // Ordner in TreeView einfügen
                    {
                        try
                        {     
                            TreeNode dir_t = new TreeNode();
                            string[] ordnername = dir.Split('\\');
                            int i = ordnername.Length - 1;
                            dir_t = node.Nodes.Add(ordnername[i].ToString());
     
                            CallRecursive(treeView1); // gibt alle vorhanden Nodes der TreeView im Array openNodes aus --> siehe foreach (TreeNode element in openNodes)
     
                            string[] sources = arrSrc.Split('|'); // Splittet den String in dem die Quellen stehen
                            foreach (string SrcLong in sources)
                            {
                                Boolean vorhanden = false;
                                foreach (TreeNode element in openNodes)
                                {
                                    if (SrcLong == element.FullPath && element.FullPath == dir_t.FullPath)
                                    {
                                        MessageBox.Show(SrcLong);
                                        fehler = false;
                                        dir_t.Checked = true;
                                        vorhanden = true;
     
                                        //Dummynodes einfügen
                                        TreeNode dummy = new TreeNode();
                                        dummy = dir_t.Nodes.Add("");
                                        dummy.ImageKey = "folder";
                                    }
                                }
                                if (vorhanden == false)
                                {
                                    if (dir_t.FullPath == SrcLong)
                                    {
                                        fehler = false;
                                        dir_t.Checked = true;
     
                                        //Dummynodes einfügen
                                        TreeNode dummy = new TreeNode();
                                        dummy = dir_t.Nodes.Add("");
                                        dummy.ImageKey = "folder";
                                    }
                                    else
                                    {
                                        if (SrcLong.Contains(dir_t.FullPath))
                                        {
                                            string strdir = dir + "\\";
                                            eNode_Src(strdir, dir_t, SrcLong, fehler);
                                            dir_t.Expand();
                                            fehler = false;
                                        }
                                        else
                                        {
                                            //Dummynodes einfügen
                                            TreeNode dummy = new TreeNode();
                                            dummy = dir_t.Nodes.Add("");
                                            dummy.ImageKey = "folder";
                                        }
                                    }
                                }
                            }                   
                        }//Ende try
                        catch 
                        {
                        
                        }
                    }
                    foreach (string file in Directory.GetFiles(Src)) //Dateien in TreeView einfügen
                    {
                        try
                        {
                            
                            TreeNode file_t = new TreeNode();
                            string[] filename = file.Split('\\');
                            int i = filename.Length - 1;
                            file_t = node.Nodes.Add(file.ToString(), filename[i].ToString());
     
                            string[] sources = arrSrc.Split('|');
                            foreach (string SrcLong in sources)
                            {
                                if (file_t.FullPath == SrcLong)
                                {
                                    fehler = false;
                                    this.treeView1.SelectedNode = file_t;
                                    this.treeView1.SelectedNode.Checked = true;
                                }
                            }
                        }
                        catch { }
                    }
                }
                catch { }
            }
     

  2. #2
    partywelt partywelt ist offline Grünschnabel
    Registriert seit
    Mar 2011
    Beiträge
    2
    Also ich habe aus einem anderem Forum einen Hinweis bekommen

    Hier der Code

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
            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];
                    }
                }
            }

    Mein Problem ist nun, dass er mir nun die Ausgewählten Quellen ordentlich anzeigt. Nur ich möchte, dass bei einem Pfad "D:\Eigene Musik\Alben" Mir alle Verzeichnisse und Dateien in den Ordnern D:\ und D:\Eigene Musik angezeigt werden und entsprechend D:\Eigene Musik\Alben" gecheckt werden. Ebenso soll "D:\Eigene Musik\Internet" gecheckt werden.

    Hab es schon über ein GetDirectory parentNode probiert, aber dann erstellt der mir den Inhalt von D:\Eigene Musik 2mal (Wenn ich mehr Ordner in D:\Eigene Musik" checken würde würde er mir die auch mehrmals checken.

    Habt ihr eine Idee wie ich das lösen kann mir GetDirectory und GetFiles und prüfen kann ob der Node schon vorhanden, sodass mir eine komplette Ordnerdtruktur bis zum gespeichertem Pfad angezeigt wird, aber jedoch nur einfach und die gewählten Pfade gecheckt werden****?

    Wäre euch echt Dankbar, bin am verzweifeln

    Gruß partywelt
     

Ähnliche Themen

  1. Treeview - Nodes erstellen anhand ID=ParentID
    Von _danku_ im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 01.12.07, 13:06
  2. Antworten: 0
    Letzter Beitrag: 19.09.05, 13:52
  3. Animation mit Pfaden erstellen (Raumschiff)
    Von Gonzo28 im Forum 3D Studio Max
    Antworten: 2
    Letzter Beitrag: 15.08.05, 16:45
  4. Formular anhand DTD erstellen, anhand XML füllen
    Von zweistein im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 05.04.05, 19:59
  5. aus Pfaden kugeln erstellen
    Von CiTor im Forum Cinema 4D
    Antworten: 3
    Letzter Beitrag: 06.06.04, 18:45

Stichworte