сбой в обработчике, который перемещается вверх по триоду в древовидной структуре c # - PullRequest
1 голос
/ 21 апреля 2010

У меня есть обработчик событий, который перемещает выбранный триод вверх. Я не знаю, почему происходит сбой в соответствии с комментариями. treeviewdocxml - это объект в виде дерева, из System.Windows.Forms

        treeViewDocXml.BeginUpdate();
        TreeNode sourceNode = treeViewDocXml.SelectedNode;

        if (sourceNode.Parent == null)
        {
            return;
        }
        if (sourceNode.Index > 0)
        {
            sourceNode.Parent.Nodes.Remove(sourceNode);
            sourceNode.Parent.Nodes.Insert(sourceNode.Index - 1, sourceNode); //HERE CRASH
        }
        treeViewDocXml.EndUpdate();

1 Ответ

4 голосов
/ 21 апреля 2010

Это потому, что вы ссылаетесь на sourceNode.Index после того, как удалили его из дерева. Попробуйте сохранить индекс в переменной перед его удалением:

    treeViewDocXml.BeginUpdate();
    TreeNode sourceNode = treeViewDocXml.SelectedNode;

    if (sourceNode.Parent == null)
    {
        return;
    }
    if (sourceNode.Index > 0)
    {
        var sourceIndex = sourceNode.Index;
        var parentNode = sourceNode.Parent;
        parentNode.Nodes.Remove(sourceNode);
        parentNode.Nodes.Insert(sourceIndex - 1, sourceNode); //HERE CRASH
    }
    treeViewDocXml.EndUpdate();

[Update]

Ссылка на родительский узел также была неверной, поэтому я исправил это в примере.

...