Re[3]: TreeView, перемещение узла в избранное  msdn  новое    Оценить +1123x:) +-   подписка   модер. 
От: Константин Б. 
Дата: 25.03.08 17:18
Оценка:2 (1)
Здравствуйте, manenkov, Вы писали:

M>Да, это я уже сделал, хотелось бы понять в чем проблема с первым вариантом кода.


treeMain.Nodes[n] = node;
treeMain.Nodes[n - 1] = nodeS;


TreeNodeCollection.set_Item устроен очень любопытным образом:

public virtual void set_Item(int index, TreeNode value)
{
    if ((index < 0) || (index >= this.owner.childCount))
    {
        throw new ArgumentOutOfRangeException("index", SR.GetString("InvalidArgument", new object[] { "index", index.ToString(CultureInfo.CurrentCulture) }));
    }
    value.parent = this.owner;
    value.index = index;
    this.owner.children[index] = value;
    value.Realize(false); // Внутри посылается TVM_INSERTITEM контролу
}


Как видим не делается никаких попыток удалить старый узел расположенный по индексу. Поэтому при каждом вызове этого метода появляется лишний узел в контроле, но не в массиве.