تحطم في المعالج الذي يتحرك إلى أعلى treenode في Treeview C#

StackOverflow https://stackoverflow.com/questions/2681335

سؤال

لدي معالج أحداث ينقل treenode المحدد. لا أعرف لماذا يتحطم في الخط مع Compated. 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();
هل كانت مفيدة؟

المحلول

هذا لأنك تشير 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();

تحديث

كانت الإشارة إلى العقدة الأصل غير صحيحة أيضًا ، لذلك قمت بإصلاح ذلك في المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top