2

我是这样试的

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;
    }
}

但是这样我只能找到父节点。有没有合适的方法来做到这一点

4

3 回答 3

3

您可以使用一种方法来处理 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);
   }
}
于 2013-01-01T16:21:17.820 回答
2
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);

            }

        }

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

于 2013-01-01T16:07:26.780 回答
0

TreeView.nodes.find(nodeName,1)

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

也许对于搜索节点的文本没有太大帮助,但希望您可以获得节点名称。

于 2017-09-11T19:08:41.760 回答