0

我正在开发一个 Winform 应用程序,我如何检查是否有一个 treeNode 其文本在里面string Mystring?请问如何检索该节点的标签?

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

2 回答 2

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;
}
于 2013-05-27T06:13:21.400 回答
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;
}
于 2013-05-27T05:57:26.390 回答