「/」という文字は、FindNode
(主ノードと子ノードの区別) という特殊な機能を持っており、それを回避する方法はないようです。1 つのオプションは、ノード名にこの文字をまったく使用しないことです。名前を変更したくない場合は、以下のコードに示すように、組み込みの機能をカスタム機能で補完できます。
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
れた名前に含まれる「/」が 1 つ以下の場合にのみ依存します。Value
それ以外の場合はすべて、メイン ノード名を抽出し、プロパティ ("/" 文字は特別な機能をトリガーしません) に依存してすべての子ノードを調べます。
明確化: 上記のコードは、次の構造のいずれかを検証する任意の状況 (子ノードの名前の「/」の数に関係なく) を処理できます。
Main_node_without_slashes/Child_node_containing_any_number_of_slashes
Main_node_without_slashes
スラッシュを含むメイン ノードがある場合、このコードを更新する必要があります。これは、「/」が親と子の区別と理解される時期と、名前の一部として理解される時期をコードに伝える方法を設定することによって行われます。