Я думаю, что здесь происходит неправильное понимание «подпунктов».
Судя по вашему коду, вы имеете дело с TreeListView
. Строки, которые отображаются при развертывании объекта верхнего уровня, - это «дети», а не «подпункты».
Для ListView
подэлементами являются все ячейки в строке , за исключением ячейка 0 (терминология Microsoft, а не моя).
Итак, этот код успешно проверяет объекты верхнего уровня:
tvTreeView.CheckObjects(toCheck.Where(x => x.Parent == null));
Следующий код ничего не делает, поскольку он пытался проверить подпункт единственного элемента, который не может быть подпунктом (т. Е. Столбец 0):
tvTreeView.CheckSubItem(subitem, tvTreeView.AllColumns[0]);
Чтобы проверить все дочерние объекты, но не объекты верхнего уровня, вы просто должны использовать CheckObjects()
снова:
tvTreeView.CheckObjects(toCheck.Where(x => x.Parent != null));
CheckObjects()
работает с любым объектом в элементе управления, а не только с объектами верхнего уровня.