如何在树视图中搜索子节点

时间:2013-01-01 05:34:47

标签: c#

我以这种方式对待它,

private void btnFind_Click(object sender, EventArgs 
{
    for (int i = 0; i < treeView1.Nodes.Count - 1; i++)
    {
        MessageBox.Show(i.ToString());
        treeView1.Nodes[i].BackColor = Color.Empty;
    }
    var result = from TreeNode node in treeView1.Nodes
                 where node.Text.Contains( Convert.ToString(txtFind.Text))
                 select node.Index;

    foreach (int search in result)
    {
        treeView1.Nodes[search].BackColor = Color.Yellow;
    }
}

但是通过这种方式我只能找到父节点。有没有正确的方法来做到这一点

3 个答案:

答案 0 :(得分:2)

您可以使用方法处理TreeView,然后使用另一个方法递归调用子节点。这将加载_matchingNodes以及与您的文本匹配的所有节点。

Private List<TreeNode> _matchingNodes; 

// Process the TreeView.
private void ProcessTreeView(TreeView treeView, String FindText)
{
   _matchingNodes = new List<TreeNode>();

  // Process each node recursively.
   foreach (TreeNode n in treeView.Nodes)
   {
      if(n.Text.Contains(FindText))
        _matchingNodes.Add(n);

      ProcessRecursive(n, FindText);
   }

}

private void ProcessRecursive(TreeNode treeNode, String FindText)
{

  // Process each node recursively.
   foreach (TreeNode n in treeNode.Nodes)
   {
      if(n.Text.Contains(FindText))
        _matchingNodes.Add(n);

      ProcessRecursive(n, FindText);
   }
}

答案 1 :(得分:1)

private void btnFind_Click(object sender, EventArgs e)
        {
            CallRecursive(treeView1);
        }
        private void PrintRecursive(TreeNode treeNode)
        {

            if (treeNode.Text.Contains(txtFind.Text.ToString()))
            {
                //MessageBox.Show(treeNode.Text);
                treeNode.BackColor = Color.Blue;
            }
            else
            {
                treeNode.BackColor = Color.Empty;
            }
            // Print each node recursively.

            foreach (TreeNode tn in treeNode.Nodes)
            {

                PrintRecursive(tn);

            }

        }

        // Call the procedure using the TreeView.

        private void CallRecursive(TreeView treeView)
        {

            // Print each node recursively.

            TreeNodeCollection nodes = treeView.Nodes;

            foreach (TreeNode n in nodes)
            {

                PrintRecursive(n);

            }

        }

我像这样解决了它并且它按预期工作。

答案 2 :(得分:0)

TreeView.nodes.find(nodeName的,1)

数字1指定也查看所有子节点。 0表示不包括儿童。仅在Powershell中测试过。

对于搜索节点文本可能没那么有用,但希望你能获得节点名称。