【C#】ツリービューのノードを検索して見つかった場合は選択状態にする

C#

この記事では、C#でTreeViewコントロールのノードを名前で検索して見つかった場合は選択状態にするサンプルコードを紹介します。

準備

フォーム上にツリービューを配置。名前はtreeView1とする。
ボタンもひとつ配置。名前はbutton1とする。

サンプルコード

以下のサンプルコードは、ボタン押下時にTreeView内のノードを名前で検索します。

using System;
using System.Collections;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // ノードの登録
            TreeNode rootNode = new TreeNode("ルートノード");
            rootNode.Nodes.Add("子ノード1");
            rootNode.Nodes.Add("子ノード2");
            treeView1.Nodes.Add(rootNode);

            // 全てのノードを展開
            treeView1.ExpandAll();
        }

        // ボタン押下でノードを検索する
        private void button1_Click(object sender, EventArgs e)
        {
            // 検索する名前
            string searchName = "子ノード2";

            // ツリービュー内を名前で検索
            TreeNode foundNode = FindNodeByName(treeView1.Nodes, searchName);

            // 見つかったか?
            if (foundNode != null)
            {
                // 見つかったノードを選択状態にする
                treeView1.SelectedNode = foundNode;

                // ツリービューをフォーカスする
                treeView1.Focus();
            }
            else
            {
                MessageBox.Show($"'{searchName}' は見つかりませんでした。");
            }
        }

        // ノードを名前で検索するメソッド
        private TreeNode FindNodeByName(TreeNodeCollection nodes, string name)
        {
            foreach (TreeNode node in nodes)
            {
                if (node.Text == name) // 名前が一致した場合
                {
                    return node;
                }

                // 子ノードも検索
                TreeNode foundNode = FindNodeByName(node.Nodes, name);
                if (foundNode != null)
                {
                    return foundNode;
                }
            }
            return null; // 見つからなかった場合
        }

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