我有以下代码在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”是传递给ReturnCompleteFolderPath函数的文本。
答案 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 。所以我猜这就是为什么它没有返回任何东西(看到我直到现在才知道自己是怎么回事)!
因此要么确保你也设置了名字,要么掀起你自己的搜索功能来找到它。