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(ノード名,1)

数字の 1 は、すべての子ノードも調べることを指定します。0 は、子を含めないことを意味します。Powershell でのみテストされています。

ノードのテキストを検索するのにはあまり役に立たないかもしれませんが、ノード名を取得できることを願っています。

于 2017-09-11T19:08:41.760 に答える