字符“/”对(主/子节点区分)具有特殊功能,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
如果主节点包括正斜杠,则必须更新此代码,方法是设置一种方法来告诉代码何时应将“/”理解为主子区分以及何时应理解为名称的一部分。