將磁碟目錄結構載入 TTreeView 是檔案管理介面的經典需求。本文提出三種載入策略,由簡單到高效能逐步優化,並提供完整實作代碼。
BrowseDirectory 一次走訪所有子目錄與檔案,建立完整樹狀節點。OnChanging 事件中:若節點無子節點,動態列舉該路徑下的子目錄並加入。OnChanging 時:對被展開節點的「每一個子節點」,若其無子節點,則列舉該子節點下的目錄(即載入第三層)。void __fastcall TForm1::TreeView3Change(TObject *Sender, TTreeNode *Node) {
// 組合完整路徑
AnsiString fullPath = Node->GetFullPath(); // 需自行實作或用迴圈向上拼接
if (fullPath.LastChar() != '\\') fullPath += '\\';
// 對 Node 的每個子節點,若尚無子節點則載入其下一層目錄
for (int i = 0; i < Node->Count; i++) {
TTreeNode *child = Node->Item[i];
if (child->Count == 0) {
TSearchRec sr;
if (FindFirst(fullPath + child->Text + "\\*.*", faAnyFile, sr) == 0) {
do {
if ((sr.Attr & faDirectory) && sr.Name != "." && sr.Name != "..")
TreeView3->Items->AddChild(child, sr.Name);
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
}
}
文中包含三種策略的完整專案建立步驟、組件配置與事件代碼,開發者可直接比較體驗。