使用列表视图和树视图列出文件夹和文件
本文关键字:视图 文件夹 文件 列表 | 更新日期: 2023-09-27 18:34:48
我有一个包含两个控件(TreeView和ListView(的Windows窗体,我想显示TreeView
中特定路径的所有目录,当用户单击TreeView
中列出的任何目录时,该目录的所有文件都显示在ListView
中。
这是我的代码:
Form_Load事件处理程序中,我将 E Drive 中的所有目录加载到 treeView1
private void Form1_Load(object sender, EventArgs e)
{
DirectoryInfo dInfo = new DirectoryInfo(@"E:'");
foreach (DirectoryInfo d in dInfo.GetDirectories())
{
treeView1.Nodes[0].Nodes.Add(d.Name);
}
}
问题是这样的:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
try
{
DirectoryInfo dInfo = new DirectoryInfo(e.Node.Text);
foreach (FileInfo f in dInfo.GetFiles())
{
listView1.Items.Add(f.Name);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
当任何主体单击树视图 1 中的任何目录时,代码会跳转到 catch,而不是列出 listView1 中的所有文件。
异常消息:找不到路径的一部分。
您需要向树节点添加一些数据。您可以将完整的路径名放在Text
中,方法是将代码更改为:
treeView1.Nodes[0].Nodes.Add(d.FullName);
或者,您可以使用 Name
,并向TreeNode
的Tag
字段添加一些额外的数据。
var node = treeView1.Nodes[0].Nodes.Add(d.Name);
node.Tag = d;
然后,当您需要该目录的文件时,您可以编写:
DirectoryInfo dInfo = (DirectoryInfo)e.Node.Tag;
foreach (FileInfo f in dInfo.GetFiles())
...
如果您不想保留所有这些DirectoryInfo
引用,则可以将FullName
放在Tag
字段中:
node.Tag = d.FullName;
然后,当您去检索文件时:
DirectoryInfo dInfo = new DirectoryInfo((string)e.Node.Tag);