检查TreeView中的根节点和子节点是否相同

时间:2015-07-23 15:23:50

标签: c# treeview duplicates nodes

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

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

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

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

这意味着您分配给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  

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

答案 1 :(得分:0)

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

获取新节点的完整路径后,将treenode导航到最终路径,如果有另一个名称相同的节点,则删除第一个添加的节点。 从提供的代码中不是很清楚,但我认为你可以使用这个策略。

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

希望它有所帮助!

编辑: 对不起,我正在睡觉的一整天工作,因为他们说FullPath是一个属性,编辑