c# - I am getting duplicate nodes on a treeview -


i trying create ftp program treeview control show local files. whenever close , reopen node, duplicates list of files , folders. know why happening, not sure how fix issue. occurs because when reopening node runs tvlocal_beforeexpand code each time.

{               initializecomponent(); } fileexplorer fe = new fileexplorer();     string strlocalfolder = string.empty;     string strremotehost = string.empty;      private void frmmain_load(object sender, eventargs e)     {         fe.createtree(tvlocal);      }      private void tvlocal_beforeexpand(object sender, treeviewcanceleventargs e)     {         treenode node = fe.enumeratedirectory(e.node);     } 

i using following class:

using system; using system.collections.generic; using system.text; using system.windows.forms; using system.io; using system.drawing; using microsoft.visualbasic.fileio;   namespace fileexplorer_treeview {     /* class  :fileexplorer      * author : chandana subasinghe      * date   : 10/03/2006      * discription : class use create tree view , load       *               directories , files in tree      *                */     class fileexplorer     {     public fileexplorer()     {      }      /* method :createtree      * author : chandana subasinghe      * date   : 10/03/2006      * discription : use creat , build tree      *                */      public bool createtree(treeview treeview)     {         bool returnvalue = false;          try         {             // create desktop             treenode desktop = new treenode();             desktop.text = "desktop";             desktop.tag = "desktop";             desktop.nodes.add("");             treeview.nodes.add(desktop);             // driveinfo             foreach (driveinfo drv in driveinfo.getdrives())             {                  treenode fchild = new treenode();                 if (drv.drivetype == drivetype.cdrom)                 {                     fchild.imageindex = 1;                     fchild.selectedimageindex = 1;                 }                 else if (drv.drivetype == drivetype.fixed)                 {                     fchild.imageindex = 0;                     fchild.selectedimageindex = 0;                 }                 fchild.text = drv.name;                 fchild.nodes.add("");                 treeview.nodes.add(fchild);                 returnvalue = true;             }          }         catch (exception ex)         {             returnvalue = false;         }         return returnvalue;      }      /* method :enumeratedirectory      * author : chandana subasinghe      * date   : 10/03/2006      * discription : use enumerate directories , files      *                */     public treenode enumeratedirectory(treenode parentnode)     {          try         {             directoryinfo rootdir;              // fill desktop             char [] arr={'\\'};             string [] namelist=parentnode.fullpath.split(arr);             string path = "";              if (namelist.getvalue(0).tostring() == "desktop")             {                 path = specialdirectories.desktop+"\\";                  (int = 1; < namelist.length; i++)                 {                     path = path + namelist[i] + "\\";                 }                  rootdir = new directoryinfo(path);             }          // other directories             else             {                  rootdir = new directoryinfo(parentnode.fullpath + "\\");             }              parentnode.nodes[0].remove();             foreach (directoryinfo dir in rootdir.getdirectories())             {                  treenode node = new treenode();                 node.text = dir.name;                 node.nodes.add("");                 parentnode.nodes.add(node);             }             //fill files             foreach (fileinfo file in rootdir.getfiles())             {                 treenode node = new treenode();                 node.text = file.name;                 node.imageindex = 2;                 node.selectedimageindex = 2;                 parentnode.nodes.add(node);             }            }          catch (exception ex)         {             //todo :          }          return parentnode;     } } 

}

based on code in createtree , enumeratedirectory when add new nodes, seems me nodes have not been expanded yet have single child node has empty text. can use information determine if need expand again:

private void tvlocal_beforeexpand(object sender, treeviewcanceleventargs e) {     bool never_expanded =         e.node.nodes.count == 1         && e.node.nodes[0].text == "";      if(never_expanded)     {         treenode node = fe.enumeratedirectory(e.node);     } } 

by way, don't seem use return value (treenode node). if case, can remove , invoke fe.enumeratedirectory(e.node);


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -