C#用pdf文件填充树视图

本文关键字:视图 填充 文件 pdf | 更新日期: 2023-09-27 18:26:39

在我的Winforms应用程序中,我创建了一个树视图来显示某个项目的所有文件夹,这很好,但我也希望能够看到存储在文件夹中的pdf文件。

这是我用来获取某个项目的文件夹结构的代码。

void PopulateTree()
    {
        //Getting the correct location for the project
            TreeNode rootnode = new TreeNode(@"Z:'Projecten'" + slctJaarBox.Text + "''" + slctProjectBox.Text);
            treeView1.Nodes.Add(rootnode);
            FillChildNodes(rootnode);
            treeView1.Nodes[0].Expand();
    }

    void FillChildNodes(TreeNode node)
    {
        //Creates the nodes for the folder structure on root level
        try
        {
            FileInfo files = new FileInfo(node.FullPath);
            DirectoryInfo dirs = new DirectoryInfo(node.FullPath);
            foreach (DirectoryInfo dir in dirs.GetDirectories())
            {
                TreeNode newnode = new TreeNode(dir.Name);
                node.Nodes.Add(newnode);
                newnode.Nodes.Add("*");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }
    private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
    {
        //Will only load and add a node subdirectorys if a node is expanded, 
        //this is for faster loading
        if (e.Node.Nodes[0].Text == "*")
        {
            e.Node.Nodes.Clear();
            FillChildNodes(e.Node);
        }
    }

让它发挥作用,这可能不是最好的方式。

void FillChildNodes(TreeNode node)
    {
        try
        {
            DirectoryInfo dirs = new DirectoryInfo(node.FullPath);
            foreach (DirectoryInfo dir in dirs.GetDirectories())
            {
                TreeNode newnode = new TreeNode(dir.Name);
                node.Nodes.Add(newnode);
                newnode.Nodes.Add("*");
            }
            FileInfo[] arrFilesInFolder = null;
            FileInfo bestandInFolder = null;
            arrFilesInFolder = dirs.GetFiles("*.pdf");
            foreach (FileInfo fileInFolder_loopVariable in arrFilesInFolder)
            {
                bestandInFolder = fileInFolder_loopVariable;
                TreeNode newnode = new TreeNode(bestandInFolder.Name);
                node.Nodes.Add(newnode);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }

C#用pdf文件填充树视图

从您的更新中可以看到,这里有一个我将如何做到这一点的例子。它的作用与您的代码不完全相同。我把文件节点作为子节点放在目录中,因为我觉得这更直观,但如果这是你正在寻找的功能,那么把它改回你所拥有的应该不会很困难

public TreeNode[] CreateChildNodes(){
      return (from directory in Directory.GetDirectories(node.FullPath)
             let directoryName = Path.GetDirectoryName(directory)
             let pdfFiles = from file in Directory.GetFiles(directory,"*.pdf")
                            select new TreeNode(Path.GetFileName(file))
             select new TreeNode(directoryName,pdfFiles.ToArray()).ToArray();
}

需要注意的几件事;由于您只使用文件和目录的名称,我不认为实例化DirectoryInfo或FileInfo对象有任何想法,所以我将其更改为仅使用路径/字符串。我也更喜欢像这样的辅助函数没有副作用,这就是为什么我返回节点集合,而不是将它们附加到您的版本中传递的节点(您可以调用node.nodes.AddRange传递结果,这就是该方法返回数组而不是IEnumerable的原因)