更改当前添加的节点的名称

时间:2012-10-03 09:03:52

标签: c# treeview nodes directoryservices treenode

我希望更改为目录树添加节点的名称。

 private static TreeNode GetDirectoryNodes(string path)
    {
        var dir = new DirectoryInfo(path);
        var node = new TreeNode(path);
        //node.Nodes.Add("Windows");
        foreach (var directory in dir.GetDirectories())
        {
            node.Nodes.Add(GetDirectoryNodes(path + "\\" +directory.ToString()));
        }


        return node;
    }

这将产生类似

的输出
C:\Test1
|
|-C:\Test1\Test1
|  |-C:\Test1\Test1\Test1
|-C:\Test1\Test2

然而我想要展示

C:\Test1
|
|-Test1
|  |-Test1
|-Test2

如果我使用

,我已经知道了
foreach (var directory in dir.GetDirectories())
        {
            node.Nodes.Add(directory.ToString());
        }

我将只提供添加路径名称,但不会为子目录输出重新驱动

 C:\Test1
|
|-Test1
|-Test2

那么如何更改名称

3 个答案:

答案 0 :(得分:1)

该行

var node = new TreeNode(path);

是设置每个节点的文本的位置(path的值)。

将此更改为

var node = new TreeNode(path.Substring(path.LastIndexOf('\\') + 1));

更好的是,不要通过字符串执行此操作,而是通过传递DirectoryInfo个对象。然后,您可以使用Name属性:

,而不是对目录名进行字符串解析
private static TreeNode GetDirectoryNodes(DirectoryInfo dir)
{
    var node = new TreeNode(dir.Name);
    foreach (var childDir in dir.GetDirectories())
    {
        node.Nodes.Add(GetDirectoryNodes(childDir));
    }
    return node;
}

答案 1 :(得分:1)

您可以使用DirectoryInfo.Name作为节点,它会为您提供没有完整路径的简短名称(如果需要,您可以在Tag中存储FullName)。像这样:

var node = new TreeNode(dir.Name);

答案 2 :(得分:0)

好像你想在最后一个'\'之前删除所有内容,所以为什么不使用子串函数FROM最后一个'\'的索引到字符串的结尾。