Windowsアプリケーションにおいて、ツリービューにチェックボックスを表示し、ユーザにノードを選択させるアプリを見かけることがあります。この記事では、このような処理を行うサンプルコードを紹介します。
準備
フォームにコントロールを配置してください。
・ツリービュー(treeView1)
・ボタン1つ(btnShow)
ボタンはダブルクリックして、事前にイベントハンドラを作成しておきます。
サンプルコード
ツリービューにチェックボックスを表示し、ユーザにノードを選択させる処理のサンプルです。
using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// ツリービューの初期化(GUI上で設定する場合、このメソッド呼び出しは不要)
InitializeTreeView();
}
// ツリービューの初期化(GUI上で設定する場合、このメソッドは不要)
private void InitializeTreeView()
{
// TreeViewのチェックボックスを有効にする
treeView1.CheckBoxes = true;
// 最上位ノードを2つ追加
TreeNode rootNode1 = treeView1.Nodes.Add("Root Node 1");
TreeNode rootNode2 = treeView1.Nodes.Add("Root Node 2");
// 最上位ノードにそれぞれ子ノードを2つ追加
rootNode1.Nodes.Add("Child Node 1");
rootNode1.Nodes.Add("Child Node 2");
rootNode2.Nodes.Add("Child Node 3");
rootNode2.Nodes.Add("Child Node 4");
// ノードの展開
treeView1.ExpandAll();
}
private void btnShow_Click(object sender, EventArgs e)
{
// チェックされたノードをメッセージボックスで表示するメソッドを呼び出す
ShowCheckedNodes(treeView1.Nodes);
}
// チェックされたノードをメッセージボックスで表示 ★
private void ShowCheckedNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
// ノードがチェックされていたらメッセージボックス表示
if (node.Checked)
{
MessageBox.Show(node.Text);
}
// 子ノードがあれば再帰的に処理
ShowCheckedNodes(node.Nodes);
}
}
}
}
この処理で重要なのは、★印で示したメソッドShowCheckedNodesです。このメソッドは、ノードのNodesプロパティを引数として受け取り、全てのノードを処理するとともに、それらのノードに子ノードがある場合は、メソッド自身を再帰呼び出しして子ノードの処理も行います。
再帰呼び出しとは、あるメソッドが、自分自身を呼び出す処理のことです。これは一種のループと見なすことができ、特定の終了条件が満たされるまでメソッドは自分自身を繰り返し呼び出します。この例では、「子ノードが無くなること」を再帰呼び出しの終了条件としています。
まとめ
この記事では、チェックボックス付きツリービューでチェックされたノードを表示するサンプルコードを紹介しました。