// Hier wird das ganze was wir mit dem Elternordner gemacht haben für die Unterordner und deren
        // Unterordner bzw. Dateien noch mal getan. Gibt es weitere Unterordner wird die Funktion rekursiv aufgerufen.
        private void FillTWI_TreeView(IList <SharePointFolder> folderList)
        {
            List <SharePointFolder> subfolderList = new List <SharePointFolder>();

            foreach (SharePointFolder folder in folderList)
            {
                if (folder.GetSubFolders().Count > 0)
                {
                    subfolderList.Add(folder);
                }

                foreach (SharePointFolder subFolder in folder.GetSubFolders())
                {
                    TreeNode parentNode;
                    try {
                        parentNode = FindTreeNode(subFolder.GetFolderName());
                    } catch (Exception ex) {
                        MessageBox.Show(ex.Message);
                        logger.Error(ex.Message + "/n" + ex.StackTrace);
                        logger.Debug("Subfoldername: " + subFolder.GetFolderName());
                        return;
                    }
                    if (parentNode != null)
                    {
                        TWI_TreeView.BeginUpdate();
                        parentNode.Nodes.Add(folder.GetFolderName(), folder.GetFolderName(), 0, 0);
                        this.folderList.Add(new TreeNode(folder.GetFolderName()));
                        TWI_TreeView.EndUpdate();
                    }
                }


                if (folder.GetFiles().Count > 0)
                {
                    foreach (SharePointFile file in folder.GetFiles())
                    {
                        TreeNode parentNode;
                        try {
                            parentNode = FindTreeNode(folder.GetFolderName());
                        } catch (Exception ex) {
                            MessageBox.Show(ex.Message);
                            logger.Error(ex.Message + "/n" + ex.StackTrace);
                            logger.Debug("Foldername: " + folder.GetFolderName());
                            return;
                        }
                        if (parentNode != null)
                        {
                            TWI_TreeView.BeginUpdate();
                            parentNode.Nodes.Add(file.GetName(), file.GetName(), 1, 1);
                            this.fileList.Add(new TreeNode(file.GetName()));
                            TWI_TreeView.EndUpdate();
                        }
                    }
                }
            }
            if (subfolderList.Count > 0)
            {
                FillTWI_TreeView(subfolderList);
            }
        }
        // In der Funktion FillTWI_TreeView wird der Treeview aufgebaut es wird der oberste Ordner hinzugefügt
        // und geprüft ob dieser noch Unterordner besitzt. Wenn ja werden die Unterordner ebenfalls auf Unterordner und Dateien
        // geprüft, falls die Unterordner welche besitzen werden sie in eine Liste gespeichert. Anschließend werden
        // die Unterordner des Parentordners in den TreeView gespeichert.
        private void FillTWI_TreeView()
        {
            TWI_TreeView.BeginUpdate();
            TWI_TreeView.Nodes.Add(this.parent.GetFolderName());
            TWI_TreeView.EndUpdate();

            List <SharePointFolder> folderList = new List <SharePointFolder>();

            if (this.parent.GetSubFolders().Count > 0)
            {
                foreach (SharePointFolder subFolder in this.parent.GetSubFolders())
                {
                    if (subFolder.GetSubFolders().Count > 0 || subFolder.GetFiles().Count > 0)
                    {
                        folderList.Add(subFolder);
                    }

                    TWI_TreeView.BeginUpdate();
                    TWI_TreeView.Nodes[0].Nodes.Add(subFolder.GetFolderName(), subFolder.GetFolderName(), 0, 0);
                    this.folderList.Add(new TreeNode(subFolder.GetFolderName()));
                    TWI_TreeView.EndUpdate();
                }
            }

            if (this.parent.GetFiles().Count > 0)
            {
                foreach (SharePointFile file in this.parent.GetFiles())
                {
                    TWI_TreeView.BeginUpdate();
                    TWI_TreeView.Nodes[0].Nodes.Add(file.GetName(), file.GetName(), 1, 1);
                    this.fileList.Add(new TreeNode(file.GetName()));
                    TWI_TreeView.EndUpdate();
                }
            }

            if (folderList.Count > 0)   // folderList ist die Liste mit den Unterordnern des Elternordners, die entweder andere Unterordner oder Dateien enthalten.

            {
                FillTWI_TreeView(folderList);
            }
        }
        // Eventhandler für den Drop von Dateien in das WindowsForm bzw. den Treeview
        // hier wird der Dateipfad übergeben, über den wir an die Dateien kommen, die hochgeladen werden sollen.
        // Die Dateipfade werden in das Stringarray "files" gespeichert und in der foreach-Schleife durchlaufen.
        // Am Anfang der Funktion wird die Klasse SharePointFileUploader initialisiert, damit die Klasse die ganze
        // Funktion über ansprechbar ist.
        private void TWI_TreeView_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);


            //SharePointFileUploader fileUploader = new SharePointFileUploader(this.baseUrl, this.subWebsite, this.user, this.password, this.subPage, this.listName, this.filter);

            foreach (string file in files)
            {
                SharePointFile newSPFile = new SharePointFile();

                string[] parts = file.Split('\\');          // Teilt die Dateipfade am Trennstrich '\' und speichert diese in das stringarray parts

                newSPFile.SetName(parts[parts.Length - 1]); // Das letzt Element des Arrays ist der Name der Datei.


                Point    targetPoint = TWI_TreeView.PointToClient(new Point(e.X, e.Y)); // Hier wird bestimmt wo die Dateien im Treeview gedroped wurden.
                TreeNode parentNode  = TWI_TreeView.GetNodeAt(targetPoint);

                if (parentNode != null)
                {
                    // Hier wird geprüft ob die gedropte Datei auf einem TreeNode gedropt wurde,
                    // der in der fileList drin ist. Wenn dem so ist wird der parentNode auf den Parent
                    // von sich selbst verwiesen, weil jede Datei in einem Ordner liegen muss.
                    foreach (TreeNode node in this.fileList)
                    {
                        if (node.Text == parentNode.Text)
                        {
                            parentNode = parentNode.Parent;
                        }
                    }
                }

                SharePointFolder parentFolder;

                try {
                    parentFolder = FindParentFolder(parentNode.Text);
                } catch (ArgumentException ex) {
                    MessageBox.Show(ex.Message);
                    logger.Error(ex.Message + "\n" + ex.StackTrace);
                    logger.Debug("ParentNodeText: " + parentNode.Text);
                    return;
                }
                Drag_Drop(this, new DragDropEventArgs(file, parentFolder.GetServerRelativeUrl()));

                /*fileUploader.SetUrl(parentFolder);
                 *
                 * // Hier wird die Datei über die Klasse SharePointFileUploader hochgeladen.
                 * try {
                 *  fileUploader.SetConnection();
                 *  fileUploader.UploadFile(file, parentFolder);
                 *
                 * } catch (Exception ex) {
                 *  MessageBox.Show(resourceManager.GetString("errorUploading") + newSPFile.GetName() + "\n" + resourceManager.GetString("filepath") + file + "\n\n" + ex.Message);
                 *  logger.Error(ex.Message + "\n" + ex.StackTrace);
                 *  logger.Debug(resourceManager.GetString("errorUploading") + newSPFile.GetName() + "\n" + resourceManager.GetString("filepath") + file + "\n\n" + ex.Message);
                 *  return;
                 *  }
                 * }
                 * // Am Ende wird die aktualisierte Liste neu geladen.
                 * this.AddSharePointData(fileUploader.UpdateSharePointDataList());
                 */
            }
        }