Собрать все Node.Checked из TreeView
Есть TreeView с установленным свойством TreeView.CheckBoxes = true, что позволяет выбирать несколько элементов из дерева. Для формирования списка выбранных элементом использую рекурсивный обход дерева, но список остается пустым несмотря на то что элементы в TreeView явно выделены. Подскажите, в чем может быть проблема?
List<string> nodPath = new List<string>();
void CheckedNode(TreeNode tree)
{
if (tree.Nodes != null)
{
foreach (TreeNode n in tree.Nodes)
{
if (n.Checked)
{
nodPath.Add(n.FullPath);
}
CheckedNode(n);
}
}
}
// Вызов
CheckedNode(treeView1.Nodes[0]);
Ответы (2 шт):
Автор решения: tym32167
→ Ссылка
Попробуйте так
void CheckedNode(TreeNode tree)
{
if (tree.Checked)
{
nodPath.Add(tree.FullPath);
}
if (tree.Nodes != null)
{
foreach (TreeNode n in tree.Nodes)
{
CheckedNode(n);
}
}
}
Автор решения: Viktor Mitskevich
→ Ссылка
Проблема решена. Не понял почему первый вариант не работает, но ниже приведенный код делает то что нужно
void Checks(TreeNodeCollection nodes, List<TreeNode> list)
{
foreach (TreeNode node in nodes)
{
if (node.Checked)
list.Add(node);
Checks(node.Nodes, list);
}
}
// Вызов
List<TreeNode> listNode = new List<TreeNode>();
Checks(treeView1.Nodes, listNode);
foreach(TreeNode node in listNode)
{
listView1.Items.Add(node.FullPath);
}

