foreach(TreeNode node in treeView1.Nodes){
node.Remove();
}
treeView удаление Nodes в цикле
что-то я не догоняю, что происходит.
Есть treeView, заполненый из xml порядка 1700 nodes (все в C#).
Задача: при нажатии кнопки, пробегаться и удалять nodes из treeview.
Код:
В результате скрипт работает на половину. То есть при каждом нажатии из списка удаляется ровно половина отображаемых nodes. Это как понимать? =)
Изначально, задача была реализовать поиск по nodes. Человек вводит тект, жмет кнопку - ему фильтрует найденные nodes.
При таком скрипте все работает нормально:
Код:
foreach(TreeNode node in treeView1.Nodes){
if(node.Text.Contains(""+textBox1.Text+"")){
node.ForeColor = Color.Red;
}else{
node.ForeColor = Color.Black;
}
}
if(node.Text.Contains(""+textBox1.Text+"")){
node.ForeColor = Color.Red;
}else{
node.ForeColor = Color.Black;
}
}
все расскрашивает правильно. А как дело доходит до удаления, то удаляет по половине. Помогите =).
Удивительно, что вообще хоть что-то работает: вы модифицируете коллекцию, и тут же продолжаете её использовать. С# не поддерживает магию.
Удаляйте по индексам, проходя с конца, например (RemoveAt()). Хотя лучше, наверное, собрать попадающие под критерий узлы в кучку (промежуточную коллекцию/список) и полностью перезаполнить элемент управления "за раз".
Цитата: Daniel Lavrushin
А как дело доходит до удаления, то удаляет по половине
Читайте MSDN
[QUOTE=MSDN]
TreeNodeCollection Class
......
Enumerating the collection and removing nodes is not supported.
You can also use the AddRange or Clear methods to add or remove all the tree nodes from the collection.
[/QUOTE]