Или вместо того, чтобы рекурсивно проходить по каждому узлу в TreeView каждый раз, когда что-то проверяется, что может дорого обойтись, когда, как и я, у вас есть сотни или тысячи элементов в списке, но проверяется не более 20 элементов.
Я добавляю / удаляю из списка строк после проверки / снятия отметки, поскольку мне нужны были только строки FullPath, но вы могли бы также использовать коллекцию TreeNode таким же образом, если вам это нужно.
public partial class Form1 : Form
{
List<String> CheckedNodes = new List<String>();
public Form1()
{
InitializeComponent();
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Node.Checked)
{
CheckedNodes.Add(e.Node.FullPath.ToString());
}
else
{
CheckedNodes.Remove(e.Node.FullPath.ToString());
}
}
}