首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

网上传很开的将索引装入TreeView的三种方法相關問題.

2013-09-21 
网上传很开的将目录装入TreeView的三种方法相關問題...http://www.shangxueba.com/jingyan/86198.html这是

网上传很开的将目录装入TreeView的三种方法相關問題...
http://www.shangxueba.com/jingyan/86198.html
这是网上传很开的将目录结构装入TreeView控件的三种方法
当然第三种方法很好用,不过实际运行,每当点回上一层父节点时,又会自动添加子节点一次..

点根目录[ROOT]就全部第二层子节点都自动添加一次
这该怎么处理阿!流传到现在好几年头了,没有人修正过

我尝试修正,清空再加入,判断底下子节点相同就不加入...都无法成功
或是有更好用的方式,不要一次全装入,怕拖慢载入速度。
请大神帮个忙吧.. 困扰我三天了 !! 网上传很开的将索引装入TreeView的三种方法相關問題. treeview C++?Builder 目录 节点
[解决办法]
在点击的时候判断一下,如果被点击的节点下有子节点的话就什么也不干,这样就可以了
[解决办法]
就是添加一行判断:

if(TreeView1->Selected->Count>0){ // 取得选中节点下单层子节点的数量
return;
}
把上面的代码放在最前面就可以了
[解决办法]
BCB的节点在点击时执行代码是要容错的,你试试:
if(
TreeView1->Items->Count<=0

[解决办法]

TreeView1->SelectionCount<=0

[解决办法]

TreeView1->Selected->Count>0
){
return;
}


[解决办法]
这样:
void __fastcall TForm1::TreeView3Changing(TObject *Sender, TTreeNode *Node, bool &AllowChange)

{
  Screen->Cursor=crHourGlass;
  //Animate1->Active=true;
  //防止重复增加节点
    if(Node->Count==0){
      TSearchRec sr;
      AnsiString DirName,DirTmp;
      TTreeNode * NodeTmp=Node;
      DirName=Node->Text;
  //得到完整的路径
        for(int I=Node->Level ;I>0 ;I--){
          NodeTmp=NodeTmp->Parent;
          DirTmp=NodeTmp->Text;
            if(DirTmp.SubString(DirTmp.Length(),1)!="\")


              DirTmp+="\";
  DirName.Insert(DirTmp,0);
        }
        if(DirName.SubString(DirName.Length(),1)!="\")DirName+="\";
        if(FindFirst(DirName+"*.*", faAnyFile, sr) == 0){
            do{
if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!="..")TreeView3->Items->AddChild(Node,sr.Name);
}while(FindNext(sr) == 0);
  FindClose(sr);
}
}
  Screen->Cursor=crDefault;
  //Animate1->Active=false;
}

就是你要的
[解决办法]



你看看这样能否勉强凑合:  Node->HasChildren=true; // 即使其下没有子节点也显示“+”号
[解决办法]
系统的资源管理器也是这样的做法,你可以测试一下
[解决办法]


你看看这样能否勉强凑合:  Node->HasChildren=true; // 即使其下没有子节点也显示“+”号

void __fastcall TForm1::TreeView3Changing(TObject *Sender, TTreeNode *Node, bool &AllowChange)

{
  Screen->Cursor=crHourGlass;
  //Animate1->Active=true;
  //防止重复增加节点
    if(Node->Count==0){
  TSearchRec sr;
  TSearchRec sr1;
  AnsiString DirName,DirTmp;
      TTreeNode * NodeTmp=Node;
      DirName=Node->Text;
  //得到完整的路径
        for(int I=Node->Level ;I>0 ;I--){
          NodeTmp=NodeTmp->Parent;
          DirTmp=NodeTmp->Text;
            if(DirTmp.SubString(DirTmp.Length(),1)!="\")


              DirTmp+="\";
  DirName.Insert(DirTmp,0);
        }
        if(DirName.SubString(DirName.Length(),1)!="\")DirName+="\";
if(FindFirst(DirName+"*.*", faAnyFile, sr) == 0){
do{
if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!=".."){
  TTreeNode * NodeTmp=TreeView3->Items->AddChild(Node,sr.Name);
if(FindFirst(DirName+sr.Name+"\\*.*", faAnyFile, sr1) == 0){
do{
if((sr1.Attr & faDirectory) && sr1.Name!="." && sr1.Name!=".."){
  NodeTmp->HasChildren=true;
  break;
}
}while(FindNext(sr1) == 0);
}


}
}while(FindNext(sr) == 0);
  FindClose(sr);
}
}
  Screen->Cursor=crDefault;
  //Animate1->Active=false;
}

热点排行