【问题标题】:Use ListView and TreeView to list folders and files使用 ListView 和 TreeView 列出文件夹和文件
【发布时间】:2014-12-18 21:32:27
【问题描述】:

我有一个包含两个控件(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);
        }

    }

当任何主体单击 treeView1 中的任何目录时,代码会跳转到列出 listView1 中所有文件的捕获。

异常消息:找不到路径的一部分。

【问题讨论】:

  • 问题是您将d.Name 添加到树视图节点而不是d.FullName。因此,当您创建新的DirectoryInfo 时,它没有完整路径。

标签: c# winforms treeview


【解决方案1】:

您需要向树节点添加一些数据。您可以将完整路径名放在Text 中,方法是将代码更改为:

treeView1.Nodes[0].Nodes.Add(d.FullName);

或者,您可以使用Name,并在TreeNodeTag 字段中添加一些额外的数据。

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);

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2011-12-17
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多