【问题标题】:Checking if root nodes and child nodes in a TreeView are the same检查 TreeView 中的根节点和子节点是否相同
【发布时间】:2015-07-23 15:23:49
【问题描述】:

所以我有一个 TreeView 并正在检查重复项。如果我向树中添加一个节点,然后尝试添加相同的节点,我的代码不会让这种情况发生。这就是我想要的。但是现在我需要检查子节点,所以如果根节点相同,但如果根节点的第一个子节点不同,那么添加的那个节点不同,我想在已经存在的根节点下添加这些子节点。我试过了:

if(node.Text == root.text && node.FirstNode.Text == root.FirstNode.Text) 
      nodes.Remove(node); 

但这给了我一个关于 root.FirstNode.Text 的空异常,我不确定为什么当 node.FirstNode.Text 显示子节点时它会变为空。

任何建议将不胜感激。

【问题讨论】:

    标签: c# treeview duplicates nodes


    【解决方案1】:

    这意味着您分配给root 的任何节点都没有子节点(因此root.FirstNode 为空)。 node.FirstNode 仍然可以显示它的第一个子节点,如果您分配给该节点的任何节点与分配给 root 的节点不同。

    这里重要的是,仅仅因为它们具有相同的文本,并不意味着它们是同一个节点。从提供的代码来看,它们是指不同的对象(具有不同的子节点集合,或缺少)

    我在想像下面这样的东西(不是实际代码):

    |- SomeNode           //Refers to "root" in your code. Note lack of child
    |- SomeNode           //Refers to "node". Note same text as "root"
      |- ChildNode        //Would refer to node.FirstChild  
    

    因此,您将获得具有相同文本但布局完全不同的节点。

    【讨论】:

    • 嗯,根节点(ARXXX)中有文件夹,当我将该节点添加到树时,子节点会显示第一个文件夹及其文件。但是,当我将同一节点中的不同文件夹添加到树中时。它破坏了树上已经存在的文件夹。我想在上一个文件夹下添加新文件夹,因为它们来自同一个根节点。
    • RootNode - ChildNodeFolder - ItemsInFolder。节点是添加到树中的新文件夹。因此,节点将具有相同的 RootNode,但具有不同的 ChildNodeFolder 名称。
    • 那么 ChildNodeFolder 是 RootNode 的子节点,而 ItemsInFolder 是 ChildNodeFolder 的子节点?
    • 是的,ItemsInFolder 只是该 ChildNodeFolder 中的文档。它不是很重要,但我还是添加了它
    • 我认为您在这里确实有 2 个问题.. 为什么会出现异常(我已经回答)以及如何将节点添加到正确的父节点?
    【解决方案2】:

    如果它们是同一个TreeView的两个节点,你可以使用TreeNode.FullPath属性:

    获得新节点完整路径后,将树节点导航到最终路径,如果有另一个同名节点,则删除第一个添加的节点。 从提供的代码中看不太清楚,但我认为您可以使用此策略。

    无论如何,FullPath 文档位于以下链接中: https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.fullpath(v=vs.110).aspx

    希望对您有所帮助!

    编辑: 抱歉,我睡了一整天,正如他们所说,FullPath 是一个属性,已编辑

    【讨论】:

    • TreeNode.FullPath 是一个属性,而不是一个方法
    猜你喜欢
    • 2011-04-16
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多