我有一个树视图控件。下面的代码用于查找特定的父节点。

TreeView AllProductsTreeView;

TreeNode nodeFound = AllProductsTreeView.FindNode("AAA/Sensors");


AAA-类别

传感器-子类别

这可以正常工作,但当子类别值包含正斜杠时,就会出现此问题。

TreeView AllProductsTreeView;

TreeNode nodeFound = AllProductsTreeView.FindNode("AAA/Sensors/Energy");


AAA-类别

传感器/能源-子类别

在上述情况下,它为nodeFound对象返回一个空值。

如何使用带有正斜杠的find节点方法来查找子类别。

提前致谢!

最佳答案

字符“ /”具有FindNode的特殊功能(主/子节点区分),似乎没有任何方法可以避免。一种选择是根本不使用该字符作为节点名称。如果您不想更改名称,则可以使用自定义功能来补充内置功能,如以下代码所示:

string nodePath = "AAA/Sensors/Energy";
TreeNode nodeFound = null;
string[] temp = nodePath.Split('/');
if (temp.Length > 2)
{
    //More than one "/"
    TreeNode mainNode = AllProductsTreeView.FindNode(temp[0]);
    string childPath = nodePath.Substring(temp[0].Length + 1, nodePath.Length - temp[0].Length - 1);
    foreach (TreeNode childNode in mainNode.ChildNodes)
    {
        if (childNode.Value == childPath)
        {
            nodeFound = childNode;
            break;
        }
    }
}
else
{
    nodeFound = AllProductsTreeView.FindNode(nodePath);
}


如您所见,当给定名称包含一个“ /”或更少时,此代码仅依赖于FindNode;在所有其他情况下,它都提取主节点名称,并依靠Value属性(对于该属性,“ /”字符不会触发任何特殊功能)浏览其所有子节点。

澄清:上面的代码可以处理任何情况(独立于子节点名称中的“ /”数),它可以验证以下任何结构:

Main_node_without_slashes/Child_node_containing_any_number_of_slashes
Main_node_without_slashes


如果主节点包含正斜杠,则必须通过设置一种方式告诉代码何时将“ /”理解为主要子代以及何时作为其名称的一部分来更新此代码。

10-06 11:49