【发布时间】:2014-02-19 13:35:01
【问题描述】:
在我的程序中,用户使用元数据标记文件,他可以从有限且已知数量的框中选择(假设框是年、月和日)。然后将文件移动到通过组合所选数据创建的路径中。
我希望用户能够在程序设置中指定如何通过字符串创建路径,例如
[ROOT]\%year%\%month%\%day%
或三者的任何其他组合。他应该能够根据需要指定尽可能多的子级别。
现在,我有一个 TreeView 控件,我想根据用户选择的配置字符串显示 general 文件夹结构的预览,无论该文件夹是否已存在。
我希望每年文件夹都有所有月份的子文件夹,每个月的子文件夹都有全天的子文件夹(忽略不同月份的实际天数,这只是一个示例)
现在我有一个包含年、月和日值的列表,以及一个将每个列表链接到带有其名称的字符串的字典:
public partial class Form1 : Form
{
string StructureString = @"year\month\day";
string[] StructureArray = StructureString.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
List<string> year = new List<string>() {"2014", "2013", "2012"};
List<string> month = new List<string>() {"January", "February", ... , "December"};
List<string> day = new List<string>() {"1", "2", ... , "31"};
Dictionary<string, List<string>> StructureData = new Dictionary<string, List<string>>();
}
public Form1()
{
InitializeComponent(); // Designer code
InitializeData();
PopulateTreeView();
}
private InitializeData()
{
StructureData.Add("year", year);
StructureData.Add("month", month);
StructureData.Add("day", day);
}
现在,我知道我必须在这里使用递归,并且我已经设法拥有一个 TreeView,它可以通过文件系统中的现有子目录进行爬网。但我不知道如何在这里进行。
我正在尝试类似:
int i = 0;
private void PopulateTreeView()
{
treeView1.Nodes.Add(AddSubNode(i));
}
private TreeNode AddSubNode(int level)
{
TreeNode tn = new TreeNode();
foreach (string s in StructureData[StructureArray[i]])
{
if (i < StructureArray.Length)
{
tn.Nodes.Add(AddSubNode(i + 1));
}
}
i++;
return tn;
}
但我得到了 StackOverflowException。而且,一般来说,我什至不确定我在这里编写的代码是否有意义。任何帮助我走上正确方向的帮助都将非常感激。
谢谢!
【问题讨论】:
标签: c# recursion treeview hierarchy