问题描述
解决方案
资源管理器左边区域显示目录的是treeview,而右边显示文件和目录的是ListView,是两个不同的控件
解决方案二:
资源管理器左边区域显示目录的是treeview,而右边显示文件和目录的是ListView,是两个不同的控件
解决方案三:
// 完美解决方案void __fastcall TForm1::Button1Click(TObject *Sender){ String Path=Edit1->Text; if(Path.SubString(Path.Length()1)!=""\""){ Path+=""\""; } TTreeNode * Node1=TreeView3->Items->Add(NULLPath); TSearchRec sr; TSearchRec sr1; if(FindFirst(Path+""*.*"" faAnyFile sr) == 0){ do{ if((sr.Attr & faDirectory) && sr.Name!=""."" && sr.Name!=""..""){ TTreeNode * NodeTmp=TreeView3->Items->AddChild(Node1sr.Name); if(FindFirst(Path+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); }}//---------------------------------------------------------------------------void __fastcall TForm1::TreeView3Changing(TObject *Sender TTreeNode *Node bool &AllowChange){ Screen->Cursor=crHourGlass; //Animate1->Active=true; //防止重复增加节点 if(Node->Count==0){ TSearchRec sr; TSearchRec sr1; String DirNameDirTmp; 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(DirTmp0); } 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(Nodesr.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;}//---------------------------------------------------------------------------void __fastcall TForm1::TreeView3MouseDown(TObject *Sender TMouseButton Button TShiftState Shift int X int Y){ // 因为上面的代码是在选中了节点后执行的,当点击“+”时不会添加下层节点(要先选中然后点+才可以),此处解决了此问题 // 当点“+”后自动添加子节点并展开 //if(Button==mbLeft) // 按鼠标左键选中节点 //if(Button==mbRight) // 按鼠标右键选中节点 { //TTreeNode *&temp_node=TreeView1->GetNodeAt(XY); //if(temp_node!=NULL){ if(TreeView3->GetNodeAt(XY)!=NULL) { //temp_node->Selected=true; TreeView3->GetNodeAt(XY)->Selected=true; TreeView3->Selected->Expand(true); // 展开选中的节点 //下面判断temp_node的Caption或Data,然后,修改PopupMenu //ShowMessage(""Hello""); } }}
时间: 2024-10-08 20:40:19