0
我目前正在使用文件瀏覽控件(https://github.com/gregyjames/FileBrowser),但我遇到了代碼的性能問題。目前,您可以看到here,我有兩個遞歸循環將根目錄中的所有文件加載到樹視圖中。我怎樣才能修改它,以便最初加載根目錄中的子文件夾,然後在用戶選擇時加載每個目錄的子目錄(即用戶選擇一個文件夾,然後加載內容)。任何幫助表示感謝,謝謝!懶惰加載目錄樹視圖中的子文件/文件夾
我目前正在使用文件瀏覽控件(https://github.com/gregyjames/FileBrowser),但我遇到了代碼的性能問題。目前,您可以看到here,我有兩個遞歸循環將根目錄中的所有文件加載到樹視圖中。我怎樣才能修改它,以便最初加載根目錄中的子文件夾,然後在用戶選擇時加載每個目錄的子目錄(即用戶選擇一個文件夾,然後加載內容)。任何幫助表示感謝,謝謝!懶惰加載目錄樹視圖中的子文件/文件夾
這是代碼,我能想到的延遲加載子節點
// Form1.OnLoad
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
var root = new FolderFileNode(_path);
treeView1.Nodes.Add(root);
root.LoadNodes();
treeView1.BeforeSelect += (sender, args) =>
{
//This flickers a lot , a bit less between BeginUpdate/EndUpdate
(args.Node as FolderFileNode)?.LoadNodes();
};
treeView1.AfterExpand += (sender, args) =>
{
(args.Node as FolderFileNode)?.SetIcon();
};
treeView1.AfterCollapse += (sender, args) =>
{
(args.Node as FolderFileNode)?.SetIcon();
};
}
class FolderFileNode : TreeNode
{
private readonly string _path;
private readonly bool _isFile;
public FolderFileNode(string path)
{
if(string.IsNullOrWhiteSpace(path)) throw new ArgumentException(nameof(path));
Text = Path.GetFileName(path);
_isFile = File.Exists(path);
_path = path;
if (!_isFile && Directory.EnumerateFileSystemEntries(_path).Any())
{
//Will indicate there is children
Nodes.Add(new TreeNode());
}
SetIcon();
}
public void SetIcon()
{
// image[2] is Folder Open image
ImageIndex = _isFile ? ImageIndex = 1 : IsExpanded ? 2 : 0;
SelectedImageIndex = _isFile ? ImageIndex = 1 : IsExpanded ? 2 : 0;
}
private IEnumerable<string> _children;
public void LoadNodes()
{
if (!_isFile && _children == null)
{
// _children = Directory.EnumerateFileSystemEntries(_path);
// Or Add Directories first
_children = Directory.EnumerateDirectories(_path).ToList();
((List<string>) _children).AddRange(Directory.EnumerateFiles(_path));
//Theres one added in the constructor to indicate it has children
Nodes.Clear();
Nodes.AddRange(
_children.Select(x =>
// co-variant
(TreeNode) new FolderFileNode(x))
.ToArray());
}
}
}
這個偉大的工程謝謝你最簡單的/最低金額!有沒有什麼辦法可以讓文件夾上的+/-表示存在子內容或將文件和文件夾分組在一起?目前它將文件和文件夾結合在一起。我怎樣才能顯示文件夾比文件?類似於窗口按類型排序。 – gregyjames
編輯與要求的功能,...你不需要接受答案? :) – Dan
哎呀,我的壞!再次感謝! – gregyjames