在WinForms中使用TreeView创建文件夹

velaa5lx  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(198)

我看到了很多用TreeView显示现有文件夹结构的例子,但我想做的是以下-〉
我在我的C# WinForms中有一个标准的文件夹结构,有几个文件夹和子文件夹,还有一个显示路径中现有文件夹的组合框。
用户应该能够从我的comboBox中选择一个现有的文件夹,只需按下一个按钮就可以在我的TreeView中创建每个选中的项目。
这是我现有的代码:

public Form1()
    {
        InitializeComponent();
        this.FormBorderStyle = FormBorderStyle.None;
        Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, Width, Height, 20, 20));
        foreach (TreeNode tn in pathLorem.Nodes)
        {
            tn.Expand();
        }
        DirectoryInfo obj = new DirectoryInfo("F:\\");
        DirectoryInfo[] folders = obj.GetDirectories();
        loremDropDown.DataSource = folders;
    }

我不乞求一个完成的代码,我只是需要一个教程或现有的StackOverflow后。我现在搜索1小时。

tv6aics1

tv6aics11#

根据您的说明,您需要在给定的目标路径中从选中的节点创建树目录结构。
编辑建构函式,如下所示...

public Form1()
{
    InitializeComponent();
    this.FormBorderStyle = FormBorderStyle.None;
    Region = System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, Width, Height, 20, 20));
    foreach (TreeNode tn in pathLorem.Nodes)
    {
        tn.Expand();
    }
    loremDropDown.DisplayMember = "Name";
    loremDropDown.ValueMember = "FullName";
    loremDropDown.DataSource = new DirectoryInfo("F:\\").GetDirectories();
}

创建一个递归方法以获取选中的节点。

private IEnumerable<TreeNode> GetCheckedNodes(TreeNodeCollection nodeCol)
{
    foreach (TreeNode node in nodeCol)
    {
        if (node.Checked ||
            node.Nodes.Cast<TreeNode>().Any(n => n.Checked))
        {
            yield return node;
        }

        foreach (TreeNode childNode in GetCheckedNodes(node.Nodes))
        {
            if (childNode.Checked)
                yield return childNode;
        }
    }
}

要创建目录,请使用Path.Combine目标路径和TreeNode.FullPath,并将TreeView.PathSeparator替换为Path.DirectorySeparatorChar

private void SomeButton_Click(object sender, EventArgs e)
{
    var destPath = loremDropDown.SelectedValue.ToString();
    var treeSep = pathLorem.PathSeparator;
    var dirSep = Path.DirectorySeparatorChar.ToString();

    foreach (var node in GetCheckedNodes(pathLorem.Nodes))
    {
        var sPath = Path.Combine(destPath, node.FullPath.Replace(treeSep, dirSep));
        Directory.CreateDirectory(sPath);
    }
}

相关问题