无法检测到重复的树视图节点并将其正确分配为子节点

时间:2014-04-25 04:00:28

标签: c# .net c#-4.0 treeview

我有一个方法用作线程安全回调来更新树视图。它需要两个字符串参数。第一个是传递的数据,第二个是它检查的主机的IP。

我正在尝试检查树视图当前是否包含包含输入字符串的字符串,如果它不应该将它作为父节点添加到树视图中,那么在下面添加ip字符串作为一个孩子。虽然它确实已经包含该输入字符串作为父节点,但它应该只添加数据字符串匹配的父节点下面的IP地址。所以它基本上对ips进行了排序。每个父节点下面都有多个ips。

我的问题是我的方法是将每个字符串添加为它自己的父字符串,无论它是否重复,这也意味着它不会在父字母下面添加重复输入的IP。谁能看一看,看看我哪里出错?

 public void UpdateScan(string input, string ip)
        {
            lock (outputTree)
            {
                outputTree.BeginUpdate();

                if (!(outputTree.Nodes.ContainsKey(input)))
                {
                    TreeNode treeNode = new TreeNode(input);
                    //Add our parent node
                    outputTree.Nodes.Add(treeNode);
                    //Add our child node
                    treeNode.Nodes.Add(ip);
                }
                else
                {
                    TreeNode[] treeNode = outputTree.Nodes.Find(input, true);
                    //Add only child node
                    foreach (var node in treeNode)
                    {
                        node.Nodes.Add(ip);
                    }
                }

                outputTree.EndUpdate();
            }
        }

1 个答案:

答案 0 :(得分:1)

我能够让它运转起来。通过动态地将包含数据的密钥添加到父节点,然后我可以使用该密钥查找父级以向其添加正确的子级。

public void UpdateScan(string input, string ip)
{
    lock (outputTree)
    {
        outputTree.BeginUpdate();

        if (! outputTree.Nodes.ContainsKey(input))
        {
            TreeNode treeNode = new TreeNode(input);
            treeNode.Name = input;
            //Add our parent node
            outputTree.Nodes.Add(treeNode);
            //Add our child node
            treeNode.Nodes.Add(ip);
        }
        else
        {
            TreeNode[] found = outputTree.Nodes.Find(input, true);
            TreeNode newChild = new TreeNode(ip);
            //Add only child node
            found[0].Nodes.Add(newChild);
        }

        outputTree.EndUpdate();
    }
}