今回は、TreeViewコントロール(System.Windows.Forms名前空間)の基本的な使い方を紹介します。
TreeViewコントロールは、データ項目を「ノード」と呼び、このノードをツリー形式で表示するためのもので、Windowsのエクスプローラやレジストリエディタでも使われているコントロールです。
「Windows フォームアプリケーション」を作成して、とあるフォーム(frmMain)上に配置したtreeView1(TreeViewコントロール)を使って説明していきます。
TreeViewコントロールへデータを追加する
TreeViewコントロールの各ノード(項目)は、それぞれTreeNodeクラス(System.Windows.Forms名前空間)のオブジェクトとして実装していきます。
例として、コンピュータとそのコンピュータにあるドライブの情報をTreeViewで表示してみます。
コンピュータ1 | |
ハードディスク | |
DVD-ROMドライブ | |
コンピュータ2 | |
ソリッドステートドライブ | |
外付けハードディスク |
このツリーを作るとき、ノードの作成方法は2つあります。
- 子ノードから作成して親ノードを作る
- 親ノードを作ってから子ノードを親ノードに入れていく
子ノードから作成して親ノードを作る
一つの親ノードの中にある子ノードに関するTreeNodeオブジェクトを生成して子ノードがそろったところで配列に設定しておき、親ノードに一気に渡す方法です。
サンプルコードは下記のようになります。
// コンピュータ1の子のノードを作成 TreeNode treeNodeHDD1 = new TreeNode("ハードディスク"); TreeNode treeNodeDVD1 = new TreeNode("DVD-ROMドライブ"); // 子のノードをまとめる配列を用意 TreeNode[] treeNodeSubFolder1 = { treeNodeHDD1, treeNodeDVD1 }; // 親のノードを作成(子のノードを入れる) TreeNode treeNodeComuter1 = new TreeNode("コンピュータ1", treeNodeSubFolder1); // コンピュータ2の子のノードを作成 TreeNode treeNodeSSD2 = new TreeNode("ソリッドステートドライブ"); TreeNode treeNodeHDD2 = new TreeNode("外付ハードディスク"); // 子のノードをまとめる配列を用意 TreeNode[] treeNodeSubFolder2 = { treeNodeSSD2, treeNodeHDD2 }; // 親のノードを作成(子のノードを入れる) TreeNode treeNodeComuter2 = new TreeNode("コンピュータ2", treeNodeSubFolder2); TreeNode[] treeNodeRoot = { treeNodeComuter1, treeNodeComuter2 }; // 最上位階層に対してまとめて項目(ノード)を追加 treeView1.Nodes.AddRange(treeNodeRoot); // 先頭のノードを展開する treeView1.TopNode.Expand();
親ノードを作ってから子ノードを親ノードに入れていく
こちらは、親ノード(例では「コンピュータ1」や「コンピュータ2」)を作っておき
そこに子ノードを1つ1つ追加していく方法です。
サンプルコードは下記のようになります。
// 親ノードを生成(この段階で子ノードは存在しません) TreeNode treeNodeComuter1 = new TreeNode("コンピュータ1"); // コンピュータ1の子ノードを生成して追加します treeNodeComuter1.Nodes.Add(new TreeNode("ハードディスク")); treeNodeComuter1.Nodes.Add(new TreeNode("DVD-ROMドライブ")); TreeNode treeNodeComuter2 = new TreeNode("コンピュータ2"); // コンピュータ2の子ノードを生成して追加します treeNodeComuter2.Nodes.Add(new TreeNode("ソリッドステートドライブ")); treeNodeComuter2.Nodes.Add(new TreeNode("外付ハードディスク")); // TreeViewに入れるための配列を作成し、用意したノードを格納しておきます TreeNode[] treeNodeRoot = { treeNodeComuter1, treeNodeComuter2 }; // 最上位階層に対してまとめて項目(ノード)を追加 treeView1.Nodes.AddRange(treeNodeRoot); // 先頭のノードを展開する treeView1.TopNode.Expand();
上記2つのサンプルは、子ノードから作るか、親ノードから作るかの違いだけで実行して表示されたものに違いはありません。