2013-05-16 4 views
0

Длинная короткая история:TreeNode Remove() не работает

  • Я траверс родовое дерево и собрать некоторые узлы в список в соответствии с фильтром
  • после полного обхода я начинаю удаление каждого узла по одному

Удалите собранные узлы

foreach (TreeData nd in nodeBucket.Reverse<TreeData>()) 
{ 
    if (nd.node.Parent != null) 
    { 
     nd.node.Remove(); 
    } 
} 

дерево имеет около 2000 узлов. Так или иначе, когда все узлы должны быть удалены, есть несколько узлов, которые не удаляются, на них вызывается Remove(), и они имеют нулевые родительские послесловия. Узлы, которые не удаляются, всегда одинаковы.

Также попробовал node.Parent.Nodes.Remove(node), не повезло.

tree.BeginUpdate(); 
tree.EndUpdate(); 
tree.Invalidate(); 
tree.Refresh(); 
tree.Update(); 

не работает.

TreeData структура выглядит следующим образом:

struct TreeData 
{ 
    public TreeData(TreeNode node) 
    { 
     this.node = node; 
     this.parent = node.Parent; 
     this.level = node.Level; 
    } 

    public TreeNode node; 
    public TreeNode parent; 
    public int level; 
} 

Выпуск фиксированной: проблема была связана с дублируют узлы (фильтрация была проверка имен узлов).

+0

Что вы имеете в виду под «не удаляются»? Остаются ли они в коллекции узлов их родительского узла? – svinja

+0

Они отображаются/видны в древовидной структуре, хотя после их удаления они будут иметь опорный набор родительских элементов равным null, а родительский узел не будет ссылаться на них. –

+0

Итак, у вас есть код пересечения, можете ли вы обновить вопрос с этим также – Damith

ответ

0

Если вы хотите сохранить текущий узел, но только нужно, чтобы удалить детей

While(node.Nodes.Count>0) 
    node.Nodes[0].Remove(); 
+0

не повезло, узлы все еще видны –