就是要做出类似windows管理器的树列表,该怎么做呢,用treeview做,但是怎么在treeview里显示文件列表,求各位大神
资源管理器左边区域显示目录的是treeview,而右边显示文件和目录的是ListView,是两个不同的控件
// 完美解决方案
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String Path=Edit1->Text;
if(Path.SubString(Path.Length(),1)!="\\"){
Path+="\\";
}
TTreeNode * Node1=TreeView3->Items->Add(NULL,Path);
TSearchRec sr;
TSearchRec sr1;
if(FindFirst(Path+"*.*", faAnyFile, sr) == 0){
do{
if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!=".."){
TTreeNode * NodeTmp=TreeView3->Items->AddChild(Node1,sr.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 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;
}
//---------------------------------------------------------------------------
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(X,Y);
//if(temp_node!=NULL){
if(TreeView3->GetNodeAt(X,Y)!=NULL)
{
//temp_node->Selected=true;
TreeView3->GetNodeAt(X,Y)->Selected=true;
TreeView3->Selected->Expand(true); // 展开选中的节点
//下面判断temp_node的Caption或Data,然后,修改PopupMenu
//ShowMessage("Hello");
}
}
}