2

ツリー ビュー コントロールがあります。以下のコードは、特定の親ノードを見つけるために使用されます。

TreeView AllProductsTreeView;

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

AAA - カテゴリ

センサー- サブカテゴリ

これは正常に機能しますが、サブカテゴリの値にスラッシュが含まれていると問題が発生します。

TreeView AllProductsTreeView;

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

AAA - カテゴリ

センサー/エネルギー- サブカテゴリ

上記の状況では、nodeFound オブジェクトに対して null 値を返します。

サブカテゴリを見つけるためにスラッシュ付きのノード検索メソッドを使用するにはどうすればよいですか。

前もって感謝します!

4

1 に答える 1

2

「/」という文字は、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

スラッシュを含むメイン ノードがある場合、このコードを更新する必要があります。これは、「/」が親と子の区別と理解される時期と、名前の一部として理解される時期をコードに伝える方法を設定することによって行われます。

于 2013-08-08T09:31:45.647 に答える