将treeView节点Text与String进行比较

时间:2013-05-27 05:51:18

标签: c# winforms treeview nodes

我正在使用Winform应用程序,如何检查是否有一个treeNode,其文本在string Mystring内?我该如何检索此节点的标签?

if (myString.Contains(treeView1.Nodes.ToString()))

2 个答案:

答案 0 :(得分:1)

这仅适用于第一个匹配的节点。

private TreeNode FindMatchedNode(TreeNodeCollection tnCol, string text)
{
    TreeNode tn = null;

    foreach (TreeNode node in tnCol)
    {
        if (text.ToLower().Contains(node.Text.ToLower()))
        {
            tn = node;
            break;
        }
        else if (node.Nodes != null)
        {
            tn = FindNode(node.Nodes, text);

            if (tn != null)
                break;
        }
    }

    return tn;
}

和所有匹配的节点

private List<TreeNode> FindAllMatchedNodes(TreeNodeCollection tnCol, string text)
{
    List<TreeNode> retVal = new List<TreeNode>();

    foreach (TreeNode node in tnCol)
    {
        if (text.ToLower().Contains(node.Text.ToLower()))
        {
            retVal.Add(node);
        }
        else if (node.Nodes != null)
        {
            retVal.AddRange(FindNode(node.Nodes, text));
        }
    }

    return retVal;
}

答案 1 :(得分:0)

此方法将从根遍历树并找到Text位于myString内的第一个节点

public object FindNode()
{
    var queue = new Queue<TreeNode>();

    foreach (var n in treeView1.Nodes)
    {
         // Add all root nodes to queue
         queue.Enqueue(n);
    }

    while (queue.Count > 0)
    {
        // Take the next node from the front of the queue
        var node = queue.Dequeue();

        // Check if myString contains node text
        if (myString.Contains(node.Text))
            return node.Tag;

        // Add the node’s children to the back of the queue
        foreach (var child in node.Children)
        {
            queue.Enqueue(child);
        }
    }

    // None of the nodes matched the specified string.
    return null;
}