TreeViewの特定のノードの子ノードを削除する - C#

TreeViewにて特定のノードの子ノードを削除する方法を紹介します。

UI

下図のUIを準備します。(Buttonは2つありますが、使用するのはbutton2のみです。)

コード

下記コードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ClearNode
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      TreeNode root = new TreeNode("Root");
      treeView1.Nodes.Add(root);

      TreeNode child = new TreeNode("child1");
      root.Nodes.Add(child);

      for (int i = 0; i < 3; i++) {
        child.Nodes.Add(new TreeNode("subchild" + i.ToString()));
      }

      child = new TreeNode("child2");
      root.Nodes.Add(child);

      for (int i = 0; i < 3; i++) {
        child.Nodes.Add(new TreeNode("subchild" + i.ToString()));
      }

      child = new TreeNode("child3");
      root.Nodes.Add(child);
    
      for (int i = 0; i < 3; i++) {
        child.Nodes.Add(new TreeNode("subchild" + i.ToString()));
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      TreeNode tn = treeView1.Nodes[0].Nodes[1];
      tn.Nodes.Clear();
    }
  }
}

解説

Loadイベント
Loadイベントはプログラム実行時にTreeViewにノードを追加する処理です。ノードの追加については「ルートノードの追加」や「子ノードの追加」の記事を参照してください。

button1
  TreeNode tn = treeView1.Nodes[0].Nodes[1];
にて、最初のルートノードの2番目の子ノードを取得します。treeView1.Nodes[0]が最初のルートノードを示しています。そのあとに続く.Nodes[1]が2番目の子ノードを表します。

  tn.Nodes.Clear();
TreeNodeのClear()メソッドを呼び出すことで、そのノードが持つ子ノードを削除できます。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


TreeViewのノードを展開すると下図の状態となります。


button2を押します。最初のルートノードの2番目の子ノードが持つ子ノードがすべて削除されました。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2012-07-10
iPentec all rights reserverd.