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 に答える