【C#】TreeViewでカスタム情報を持たせる2つの方法

C#

TreeViewはC#で階層構造のデータを表示するのによく使われるコントロールです。TreeNodeにユーザ独自のデータを持たせることで、アプリケーションの機能を柔軟に拡張できます。ここでは、TreeNodeにカスタム情報を持たせる2つの方法を紹介します。

方法1: TreeNodeクラスのTagプロパティを使用する

TreeNodeクラスのTagプロパティを使って任意のオブジェクトをTreeNodeに関連付けます。Tagプロパティはobject型なので、様々なタイプのデータを格納することが可能です。これにより、シンプルなデータから複雑なオブジェクトまで、TreeNodeに柔軟にデータを持たせることができます。

// ツリービューへのアイテムの登録
private void button1_Click(object sender, EventArgs e)
{
	// ListViewItemを作成し、ListViewに追加
	TreeNode node1 = new TreeNode("項目1");
	node1.Tag = "これは項目1のカスタムデータです";
	treeView1.Nodes.Add(node1);

	TreeNode node2 = new TreeNode("項目2");
	node2.Tag = new { Description = "項目2の説明", Value = 123 };
	treeView1.Nodes.Add(node2);
}
// ノードを使用
private void button2_Click(object sender, EventArgs e)
{
	// ノード1をカスタムクラスとして取得
	var node = treeView1.Nodes[0];

	// 独自のプロパティを使用
	Console.WriteLine((string)node.Tag);   // ★重要:元の型へのキャストが必要
}

方法2: ListViewItemを継承したクラスを使用する

TreeNodeを継承したカスタムクラスを作成します。これにより、TreeNodeに新しいプロパティやメソッドを追加して、より複雑な機能を実装することができます。この方法は、TreeNodeにカスタムの振る舞いやデータ構造を持たせたい場合に適しています。

// TreeNodeを継承したカスタムクラス
public class CustomTreeNodeItem : TreeNode
{
	// 独自のプロパティ
	public string CustomInfo { get; set; }

	// コンストラクタ
	public CustomTreeNodeItem(string text)
		: base(text)
	{
	}

	// 独自のメソッドも作れる
	public void CustomMethod()
	{
		Console.WriteLine("独自のメソッドを実行");
	}
}
// ツリービューへのアイテムの登録
private void button3_Click(object sender, EventArgs e)
{
	// CustomListViewItemを2つ作成し、ListViewに追加
	CustomTreeNodeItem customNode1 = new CustomTreeNodeItem("項目1");
	customNode1.CustomInfo = "これは項目1のカスタム情報です";
	treeView2.Nodes.Add(customNode1);

	CustomTreeNodeItem customNode2 = new CustomTreeNodeItem("項目2");
	customNode2.CustomInfo = "これは項目2のカスタム情報です";
	treeView2.Nodes.Add(customNode2);
}
// ノードを使用
private void button4_Click(object sender, EventArgs e)
{
	// ノード1をカスタムクラスとして取得(キャストが必要)
	var customNode = (CustomTreeNodeItem)treeView2.Nodes[0];

	// 独自のプロパティを使用
	Console.WriteLine(customNode.CustomInfo);

	// 独自のメソッドを実行
	customNode.CustomMethod();
}

まとめ

今回紹介した方法は、どちらの方法もTreeNodeに追加情報を持たせてアプリケーションの機能を拡張しやすくなります。使用する方法はアプリケーションの要件や好みに応じて選んでください。

タイトルとURLをコピーしました