Собрать все 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);
            }
→ Ссылка