【发布时间】:2017-08-24 13:05:38
【问题描述】:
我有一个需要动态填充的 TreeView。
内容类似于目录结构(参考附图)。
现在,为了获取这些“文件夹”,我使用了一个命令,该命令将仅列出“顶级”文件夹(参考图片)。 (请注意这不是操作系统目录/文件夹。我只是使用目录/文件夹类比来让事情变得容易理解)
所以,例如我有 Root、Folder1、Sub_Folder1、Sub_Folder2、Sub-sub_folder_1、Folder2,然后发出带有“/”选项的命令会给我一个列表:Folder1、Folder2。
如果我需要 Level-2 文件夹(Sub_Folder_1 和 Sub_Folder_2),我需要再次发出带有选项“/Folder1”的命令..
我需要重复发出这些命令,直到获得最后一个子文件夹并使用列表填充 TreeView。
我正在使用以下 C# (4.5) 代码,但我只能列出 2 个级别。
任何帮助纠正将不胜感激!
try
{
BuildInfaCmd(InfaCmdType.ListFolders, folder);
InfaCmd icmd = CallInfaCmd(InfaCmdExe, InfaCmdArgs);
if (icmd.ExitCode() == 0)
{
List<string> folders = icmd.GetFolders();
if (folders.Count > 0)
topFolderFound = true;
foreach (string f in folders)
{
if (node == null) // Add to 'root' of Treeview
{
TreeNode p = new TreeNode(f);
treeView1.Nodes.Add(p);
PopulateFoldersRecursive(f, null);
}
else
{
callLvl += 1;
//MessageBox.Show("Calling recursive " + callLvl.ToString());
TreeNode p = new TreeNode(f);
node.Nodes.Add(p); // Add to calling node as children
string fold = node.Text + "/" + f; // The sub-folder to be provided to ListFolder command like -p /RootFolder/SubFolder1/SubFolder2/...
PopulateFoldersRecursive(fold, p, callLvl);
}
}
}
else
{
MessageBox.Show(icmd.GetError(), "Error while executing InfaCmd", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
【问题讨论】:
-
这段代码是
PopulateFoldersRecursive方法的吗?你调试过代码吗?调试有什么发现吗?CallInfaCmd是什么? -
我认为这个问题已经得到解答,这个链接可以帮助你LINK