C#,无法按文本查找TreeView子节点

时间:2014-07-08 21:34:40

标签: c# treeview find

我有以下代码在TreeView中查找子节点:

public void NodeHinzufuegen()
{
    // Other stuff above
    ReturnCompleteFolderPath(erstellterPunkt.Text);
    // Other stuff below
}



public void ReturnCompleteFolderPath(string nodename)
{
    TreeNode[] tempnode = tree_vorlagen.Nodes.Find(nodename, true);
        if (tempnode.Length > 0)
        {
            //tree_vorlagen.SelectedNode = tempnode[0];
            MessageBox.Show(tempnode[0].Parent.Name);
        }
}

调用ReturnCompleteFolderPath()并成功将文本传输到ReturnCompleteFolderPath(在调试中通过鼠标悬停检查)。如果我在调试模式下鼠标悬停tempnode,它会显示{System.Windows.Forms.TreeNode [0]},如果我将鼠标悬停在tempnode.Length,它会显示“0”。所以似乎找不到节点。有关于此的任何想法吗?

我的Treeview看起来像这样。

测试1

  • 的Test2

“Test2”是传递给ReturnCompleteFolderPath函数的文本。

2 个答案:

答案 0 :(得分:2)

来自TreeNodeCollection.Find documentation

  

查找具有指定键的树节点,可选择搜索子节点。

     

...

     

Name属性对应于TreeNodeCollection中TreeNode的键。

除非您为TreeNodes设置名称,否则此方法永远不会找到结果。如果要按文本搜索,可以在创建节点时附加名称

    TreeNode test2 = new TreeNode("Test2") { Name = "Test2" };

甚至为所有人添加名称:

    // Fetch each node without a name and give it one
    foreach (TreeNode node in tree_vorlagen.Nodes.Find("", true))
        node.Name = node.Text;

    // Now the "Test2" node can be found
    Console.WriteLine(tree_vorlagen.Nodes.Find("Test2", true).Length); // Prints 1

答案 1 :(得分:0)

TreeNodeCollection.Find方法查找 Name 属性与搜索字符串匹配的节点,即不是 Text 。所以我猜这就是为什么它没有返回任何东西(看到我直到现在才知道自己是怎么回事)!

因此要么确保你也设置了名字,要么掀起你自己的搜索功能来找到它。

More information here