.NET TIPS

TreeViewコントロールへ項目を追加するには?

デジタルアドバンテージ 一色 政彦
2005/02/04

 本稿では、.NET Frameworkの標準コントロールであるTreeViewコントロール(System.Windows.Forms名前空間)を活用するために、TreeViewコントロールにデータを追加する方法を紹介する。

 TreeViewコントロールはデータ項目(ノード)をツリー形式で表示するためのもので、Windowsのエクスプローラでもおなじみのコントロールだ。例えば次の画面のように、ツリー状にデータ項目を並べて表示することができる。

TreeViewコントロールのツリー表示

 それではさっそくTreeViewコントロールへのデータの追加方法を説明しよう。

TreeViewコントロールへデータをまとめて追加する方法

 本稿のサンプル・プログラムでは、次のようなツリーを構築してみよう。

 TreeViewコントロールの各ノードは、それぞれTreeNodeクラス(System.Windows.Forms名前空間)のオブジェクトとして実装する。上記のツリーには下位のノードとして「果物」と「野菜」という2項目があるが、まずこれらを次のようにして作成する。

TreeNode treeNodeFruits = new TreeNode("果物");
TreeNode treeNodeVegetables = new TreeNode("野菜");

 「食べ物」のように子ノードを持つノードの場合には、子ノードとなるTreeNodeオブジェクトを配列にして、コンストラクタの第2パラメータで指定することができる。

TreeNode[] treeNodeSubFolder = { treeNodeFruits, treeNodeVegetables};
TreeNode treeNodeFood = new TreeNode("食べ物", treeNodeSubFolder);

 同様にして、「飲み物」のノードを作成する。

TreeNode treeNodeDrink = new TreeNode("飲み物");

 以上で、各項目に対するノードの作成は完了だ。次に最上位のノードである「食べ物」と「飲み物」をTreeViewコントロールに追加する。

 TreeViewコントロールへ項目を追加するにはTreeViewコントロールのNodesプロパティに対してAddメソッドもしくはAddRangeメソッドを使えばよい。

 AddRangeメソッドでは、次のように最上位のノードを配列にまとめて指定することにより、複数の項目を一度に追加できる。

TreeNode[] treeNodeRoot = { treeNodeFood, treeNodeDrink };
treeView1.Nodes.AddRange(treeNodeRoot);

 以上をまとめた具体的なサンプル・コードは、次のとおりだ。

// TreeViewコントロールのデータを更新します。
private void RefreshTreeView()
{
  treeView1.Nodes.Clear();

  TreeNode treeNodeFruits = new TreeNode("果物");
  TreeNode treeNodeVegetables = new TreeNode("野菜");
  TreeNode[] treeNodeSubFolder =
    { treeNodeFruits, treeNodeVegetables};

  // 下位階層に対してまとめて項目(ノード)を追加
  TreeNode treeNodeFood =
    new TreeNode("食べ物", treeNodeSubFolder);


  TreeNode treeNodeDrink = new TreeNode("飲み物");
  TreeNode[] treeNodeRoot = { treeNodeFood, treeNodeDrink };

  // 最上位階層に対してまとめて項目(ノード)を追加
  treeView1.Nodes.AddRange(treeNodeRoot);

  treeView1.TopNode.Expand();
}
TreeViewコントロールへデータをまとめて追加するサンプル・コード(C#)
 
' TreeViewコントロールのデータを更新します。
Private Sub RefreshTreeView()

  treeView1.Nodes.Clear()

  Dim treeNodeFruits As New TreeNode("果物")
  Dim treeNodeVegetables As New TreeNode("野菜")
  Dim treeNodeSubFolder() As TreeNode = _
    {treeNodeFruits, treeNodeVegetables}

  ' 下位階層に対してまとめて項目(ノード)を追加
  Dim treeNodeFood As _
    New TreeNode("食べ物", treeNodeSubFolder)


  Dim treeNodeDrink As New TreeNode("飲み物")
  Dim treeNodeRoot() As TreeNode = {treeNodeFood, treeNodeDrink}

  ' 最上位階層に対してまとめて項目(ノード)を追加
  treeView1.Nodes.AddRange(treeNodeRoot)

  treeView1.TopNode.Expand()

End Sub
TreeViewコントロールへデータをまとめて追加するサンプル・コード(VB.NET)

 上記のコードにあるTreeViewコントロールのClearメソッドは、既存のデータ項目をすべて消去するためのものだ。

 また、TreeViewコントロールのTopNodeプロパティは、追加された最初のTreeNodeオブジェクトを示す(上記の場合には、「食べ物」のノード)。このノードに対してExpandメソッドを呼び出すことにより、「食べ物」のノードが開かれて、その下位階層にある「果物」と「野菜」のノードが表示される。

TreeViewコントロールへデータを1つずつ追加する方法

 ここまでに説明したような、複数のデータをまとめて追加する方法は、TreeViewコントロールを構築する際の初期表示で役立つだろう。しかし初期表示以外では、状況に合わせてデータ項目を1つずつ登録していきたい場合もある。そのような場合には、前述のAddメソッドを利用すればよい。Addメソッドのパラメータには、TreeNodeオブジェクトを1つ指定する。

 このAddメソッドは、実際にはノードのコレクションを示すTreeNodeCollectionクラス(System.Windows.Forms名前空間)のメソッドである。各ノードからは、Nodesプロパティにより、そのノードが持つ子ノードのコレクションをTreeNodeCollectionオブジェクトとして取得することができる。

 以下のサンプル・コードは、あるノードが選択されたときに、そのノードに対して子ノードを1つ追加する。このコードはAfterSelectイベントのイベント・ハンドラとなっており、このイベントはTreeViewコントロールであるノードが選択された後に発生する。このとき、選択されたノードは、イベント・ハンドラにパラメータとして渡されたTreeViewEventArgsオブジェクトのNodeプロパティから取得できる。

private int counter = 0;

// TreeViewコントロールに項目を1つだけ追加します。
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
  if (counter > 0)
  {
    TreeNode treeNodeNew =
      new TreeNode("追加" + counter.ToString());
    e.Node.Nodes.Add(treeNodeNew);
  }
  counter++;
}
TreeViewコントロールのデータを1つだけ追加するサンプル・コード(C#)
 
Private counter As Integer = 0

' TreeViewコントロールに項目を1つだけ追加します。
Private Sub treeView1_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles treeView1.AfterSelect

  If counter > 0 Then

    Dim treeNodeNew As _
      New TreeNode("追加" + counter.ToString())
    e.Node.Nodes.Add(treeNodeNew)

  End If
  counter = counter + 1

End Sub
TreeViewコントロールのデータを1つだけ追加するサンプル・コード(VB.NET)

 以上のサンプル・プログラムを実行したのが次の画面である。

TreeViewコントロールのサンプル・プログラムの実行結果

 TreeViewコントロールでツリーを構築する場合、初期表示ですべてのノードを追加してしまうのが最も手軽な方法だろう。しかし例えばレジストリ・エディタやエクスプローラのように、ツリー階層が非常に深く、またその深さが不定で予想できない場合、ツリーのノードをすべて追加すると、それに時間がかかってしまい、アプリケーションのパフォーマンスが低下する可能性がある。「TIPS:TreeViewコントロールで効率的にツリーを構築するには?」では、それを回避する方法を紹介している。End of Article

カテゴリ:Windowsフォーム 処理対象:TreeViewコントロール
使用ライブラリ:TreeNodeクラス(System.Windows.Forms名前空間)
使用ライブラリ:TreeNodeCollectionクラス(System.Windows.Forms名前空間)
使用ライブラリ:TreeViewEventArgsクラス(System.Windows.Forms名前空間)
関連TIPS:TreeViewコントロールで効率的にツリーを構築するには?
 
この記事と関連性の高い別の.NET TIPS
TreeViewコントロールで現在選択されているノードを変更するには?
TreeViewコントロールで効率的にツリーを構築するには?
[ASP.NET]TreeViewコントロールで深階層のツリー情報を効率よく読み込むには?
[ASP.NET]TreeViewコントロールで深階層のツリー情報を効率よく読み込むには?
[ASP.NET]データベースからツリー・メニューを生成するには?
[ASP.NET]データベースからツリー・メニューを作成するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間