0

それぞれに 3 つの子ノードを持つ 3 つのカテゴリを持つツリーがあるとします。すべての子ノードが削除されたときに、ルート ノードを削除したい。私はこのようなことを試しました:

        TreeNode current = treeView1.SelectedNode;
        TreeNode parent  = treeView1.SelectedNode.Parent;

        if (parent.Nodes.Count == 0)
        {
            parent.Nodes.Remove(current);
        }

そして、それを Form1_Load に配置しました。残念ながら、すべての子ノードがなくなると、何も起こりません。このコードは正しいですか? それとも、置き忘れたので、別の場所に置いた方がいいのでしょうか?

編集:私のツリーは次のようになります:

  • 歯磨き
  • コーヒーを飲む

午後

  • 夕食
  • テレビ

  • 寝る

だから「Sleep」を削除すると決めたら、「Night」も削除したい。しかし、「テレビ」を削除することにした場合、「ディナー」と「アフタヌーン」は残しておきたいと思います。

4

2 に答える 2

1

親が null の場合、ルート ノード上にいることがわかります。したがって、そのノードは TreeView の Nodes コレクションから直接削除する必要があります。それ以外の場合は、選択したノードを親から削除できます。ノード数を見る理由さえありません。

ここで、現在のノードが null でないことも確認する必要があります。ツリー内のノードが選択されていないことは完全に理にかなっているからです。

TreeNode current = treeView1.SelectedNode;
if(current == null)
    return;

TreeNode parent  = treeView1.SelectedNode.Parent;
if (parent == null)
{
    treeView1.Nodes.Remove(current);
}
else
{
    parent.Nodes.Remove(current);
}
于 2013-07-19T14:42:43.950 に答える
1

これを試して:

if (treeView1.SelectedNode != null)
{
    if (treeView1.SelectedNode.Parent == null) treeView1.SelectedNode.Remove();
    else if (treeView1.SelectedNode.Parent.Nodes.Count == 1) treeView1.SelectedNode.Parent.Remove();
    else treeView1.SelectedNode.Remove();
}
于 2013-07-19T21:25:51.180 に答える