C#ツリービューを試す

コンピュータ

WinFormのツリービューのサンプルを作成します。

ソースコード

using System.Diagnostics;

namespace TreeViewSample01;

public partial class Form1 : Form
{
    // ノードからローカルパスを取得
    public string NodeToPath(TreeNode node, string pathText = "")
    {
        if (node.Parent == null)
            return pathText;
        
        if (node.Parent.Parent == null)
            return (node.Text + ":/" + pathText);

        return NodeToPath(node.Parent, (node.Text + "/" + pathText));
    }
    public Form1()
    {
        InitializeComponent();

        // ツリービューの生成、登録
        var treeView = new TreeView
        {
            Dock = DockStyle.Fill,
        };
        this.Controls.Add(treeView);

        // ルートノードの追加
        var rootNode = new TreeNode("PC");
        treeView.Nodes.Add(rootNode);

        // 子ノードの追加
        foreach(string str in Directory.GetLogicalDrives())
        {
            rootNode.Nodes.Add(str[0..1]);
        }

        // 選択アイテムの変更イベント
        treeView.AfterSelect += (s, e) =>
        {

            if (e.Node is null)
                return;
            var node = e.Node;
            if (node.Parent is null)
                return;
            
            string path = NodeToPath(node);
            Debug.Print(path);
            
            // 子ノードの要素数が0の場合
            if (node.Nodes.Count == 0)
            {
                // ディレクトリ名をノードに追加
                foreach(var dir in Directory.EnumerateDirectories(path))
                {
                    // 不可視属性を排除
                    var attr = File.GetAttributes(dir);
                    if ((attr&FileAttributes.Hidden) != FileAttributes.Hidden)
                    {
                        var dirName = Path.GetFileNameWithoutExtension(dir);
                        Debug.Print(dirName);
                        node.Nodes.Add(dirName);
                    }
                }
                // ノードを展開
                node.Expand();
            }
        };
    }
}

実行

アイコンが無いので雰囲気が出ていないのですが、エクスプローラーの左側のような動作をします。

コメント