在树形视图中向上移动treenode的处理程序崩溃c#

时间:2010-04-21 08:30:43

标签: c# winforms treeview treenode

我有一个事件处理程序,可以移动选定的treenode。我不知道为什么崩溃就行了。 treeviewdocxml是一个treeview对象,来自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 个答案:

答案 0 :(得分:4)

这是因为您在从树中删除它后引用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();

<强> [更新]

对父节点的引用也是错误的,所以我在示例中修复了它。