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();
}
};
}
}
実行
アイコンが無いので雰囲気が出ていないのですが、エクスプローラーの左側のような動作をします。
コメント