s'écraser dans le gestionnaire qui se déplace vers le haut un treenode dans un TreeView c #

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

Question

i ai un gestionnaire d'événements qui se déplace le treenode sélectionné vers le haut. Je ne sais pas pourquoi accident dans la ligne avec actualité commentée. treeviewdocxml est un objet d'arborescence, de 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();
Était-ce utile?

La solution

Il est parce que vous le référencement sourceNode.Index après avoir retiré de l'arbre. Essayez stocker l'index dans une variable avant de le retirer:

    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();

[Mise à jour]

La référence au noeud parent est incorrect et, je fixe dans l'exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top